2012-12-02 3 views
0

Mon instructeur a défini l'API this pour les graphiques.Comment puis-je dessiner des choses en utilisant cette API Java GUI?

C'est très simple mais j'ai passé une heure ou deux à essayer de comprendre comment faire des manipulations graphiques simples.

J'ai donc une classe T qui étend TopLevel et c'est ma trame principale. J'ai aussi un P Pad qui s'étend Pad et est ici le corps de sa méthode paintComponent:

Quand je lance l'application
@Override 
protected void paintComponent(Graphics2D g) { 
    super.paintComponent(g); 
    g.drawString("Hello", 0, 0); 
    g.fill(new Rectangle(5, 5)); 
    repaint(); //(Probably don't need) 
} 

je puis appeler T.add(P), (je fais aussi T.addButton(..) et T.display(true) je vois une toile vide avec le. bouton J'ai créé.

Toute aide est appréciée.

+1

Comment spécifiez-vous la disposition de votre pad dans votre cadre supérieur? –

+0

Je l'ai essayé avec des paramètres vides et ceci: 'new LayoutSpec (" width ", 20," height ", 20);' – jaynp

+0

1) * ".. T qui étend TopFrame" * Qu'est-ce qu'un 'TopFrame'? Je ne vois que ['TopLevel'] (http://www-inst.eecs.berkeley.edu/~cs61b/fa08/docs/ucb-docs/ucb/gui/TopLevel.html) 2) Aucune des 4 classes ne s'étend tout composant AWT ou Swing. –

Répondre

2

texte de dessin est pas aussi simple que vous le pensez.

la position y représente la ligne de base de la police (le point où la plupart tex t est assis. Il y a aussi une ligne décente, où les caractères qui se trouvent au-dessous de la ligne de base seront étendus à (des caractères comme 'g' et 'p').

La police a également une ascension. Ceci est la « hauteur » d'un caractère typiquement au-dessus de la ligne de base (à l'exception, évidemment, la descente)

enter image description here

Image de Measuring Text

Pour peindre le texte correctement, vous devez ajoutez TOUJOURS la montée à la position y ...

FontMetrics fm = g.getFontMetrics(); 
g.drawString("Hello", 0, fm.getAscent()); 

Vous pouvez également perdre l'appel repaint, cela entraînera le gestionnaire de repeindre à (ev entally) appeler la méthode paint de votre composant, encore et encore ... encore ...

Dans Swing, Graphics est généralement configuré pour que la couleur soit la couleur de premier plan des composants. Vous voudrez peut-être essayer de changer la couleur juste pour être sûr.

Essayez d'utiliser quelque chose comme g.setColor(Color.RED); avant de tenter de n'importe quoi.

+0

Merci pour l'astuce sur le texte MadProgrammer; Je m'en souviendrai certainement. Mais à ce stade, il s'agit d'obtenir quelque chose à peindre. J'ai également eu l'impression que mes objets étaient peints de la même couleur que l'arrière-plan, donc je ne pouvais pas les voir, mais changer la couleur n'a rien changé. – jaynp

+0

Stupide idée, mais, ajoutez un 'System.out.println ("painting"); 'appelle à l'intérieur de la méthode' paintComponent', juste pour être sûr qu'il est appelé – MadProgrammer

0

T.setVisible (true); // après la construction

+0

Où voyez-vous cette méthode? Je pense que c'est ce que fait 'T.display (true) .', mais je ne vois pas de' setVisible'. – jaynp

Questions connexes