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(); entre add(ga) et setVisible(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.
InformationsquelleAutor | 2013-07-29