Dessin sur JFrame
Je suis en train de dessiner des formes simples, avec de la Toile, dans cette classe, j'ai mis de la peinture
public class Game extends Canvas{
//FIELDS
public int WIDTH = 1024;
public int HEIGHT = WIDTH / 16 * 9;
//METHODS
public void start(){
Dimension size = new Dimension (WIDTH, HEIGHT);
setPreferredSize(size);
paint(null);
}
public void paint(Graphics g){
g.setColor(Color.GREEN);
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setColor(Color.BLACK);
g.fillOval(100, 100, 30, 30);
}
}
Et en ce que la Fenêtre
public class MainW {
public static void main(String[] args) {
Game ga = new Game();
JFrame frame = new JFrame ();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.add(ga);
frame.setVisible(true);
ga.start();
}
}
Il fonctionne, mais la JFrame n'est pas adapter à la Toile. J'ai pour redimensionner manuellement la fenêtre pour voir les objets. Comment puis-je emballer de sorte que JFrame automatiquement englobe la Toile?
EDIT:
C'est vraiment bizarre. Alors que le support.pack() est en effet essentielle, elle ne suffit pas.
Ce que j'ai fait a été de changer la méthode de démarrage et de le transformer en un constructeur, comme ça:
public class Game extends Canvas{
//FIELDS
public int WIDTH = 1024;
public int HEIGHT = WIDTH / 16 * 9;
//METHODS
public void Game(){
Dimension size = new Dimension (WIDTH, HEIGHT);
setPreferredSize(size);
}
puis, de l'autre classe, Eclipse se plaignait d'appeler le constructeur directement(E. G. ga.Jeu), donc je l'ai suivi l'astuce de et changé:
public static void main(String[] args) {
Game ga = new Game();
JFrame frame = new JFrame ();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.add(ga);
frame.setVisible(true);
ga.getName();
}
De cette façon, je réalise ce que j'ai à l'esprit, mais je ne sais vraiment pas pourquoi je ne peux pas appeler le constructeur.
- Ajouter
frame.pack();
entreadd(ga)
etsetVisible(true)
. - Ne mélange pas l'AWT et Swing components inutilement. Vous devriez être en s'appuyant sur une Composite et dans son
paintCompoment(...)
remplacer la méthode.
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas ce que c'est que vous essayez de faire, mais vous ne devriez JAMAIS appeler
paint
et surtout ne pas passernull
.Commencer par prendre un coup d'oeil à Exécution De La Peinture Custom et La peinture dans AWT et Swing pour plus de détails sur la façon dont les travaux de peinture.
Afin d'obtenir la fenêtre à la taille de vous, vous devez lui fournir les informations les plus importantes.
Tout
Window#pack
est la méthode que vous recherchez, il ne sera pas vous aider à moins que vous fournir des conseils de dimensionnement.Dans ce cas, vous devez remplacer la
getPreferredSize
méthode de vous de composants et de fournir une valeur de taille.Window#pack
va utiliser cette valeur pour déterminer de quelle taille il faut pour les accueillir.La peinture de la chaîne est très important et vous devez éviter de la briser à toutes les côtes. Assurez-vous de toujours faire appel à
super.paintXxx
ou être prêt pour une véritable étrangetéSouhaitez peut-être également à avoir une lecture de Dois-je éviter l'utilisation de set(de préférence|Maximum|Minimum)Taille de méthodes en Java Swing?
Utilisation
java.awt.De la fenêtre.pack
(JFrame
indirectement étendWindow
):Après la peinture sur toile essayer de repeindre le
JFrame
Également de noter:
frame.pack
pour la fixation de la taille du problème.frame.revalidate
parfois aider lors de l'ajout ou la suppression de composants dans l'exécution.