Java comment et quand exactement la méthode paint() est-elle appelée?


On m'a dit à plusieurs reprises que la méthode paint() sera appelée au besoin lorsque j'étendrai ma classe à JFrame mais par exemple. dans le code, la méthode paint n'est pas appelée et je ne vois aucun rectangle dessiné.

J'ai même essayé d'appeler la méthode paint dans le constructeur (que j'ai créé) , puis de créer un obejct pour la classe dans main mais j'ai obtenu une NullPointerException

import java.awt.Graphics;
import javax.swing.JFrame;

public class MyFirstDrawing extends JFrame
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public static void main(String args[])
    {
        JFrame w = new JFrame("Hello World");
        w.setTitle("My First Drawing");
        w.setDefaultCloseOperation(EXIT_ON_CLOSE);
        w.setSize(500,500);
        w.setVisible(true);
    }
    public void paint(Graphics g)
    {
        g.drawRect(40, 40, 100, 200);
    }
}
Author: Ishan Srivastava, 2017-05-30

1 answers

Vous avez deux cadres:

  1. Vous étendez un JFrame et remplacez la méthode paint (), mais ce cadre n'est jamais rendu visible, donc la méthode paint() n'est jamais appelée.

  2. Ensuite, vous créez un nouveau JFrame que vous rendez visible, mais ce cadre n'a pas de peinture personnalisée, vous ne voyez donc que le cadre.

Dans tous les cas, ce n'est PAS la façon de faire de la peinture personnalisée. La peinture personnalisée se fait en remplaçant paintCompnent(...) d'un JPanel, puis vous ajoutez le panneau au cadre. Lire la section du tutoriel Swing sur Peinture personnalisée pour plus d'informations et des exemples de travail que vous pouvez personnaliser.

L'exemple du tutoriel vous montrera une meilleure façon de créer votre classe, il n'est donc pas nécessaire d'étendre un JFrame. Suivez l'exemple de tutoriel.

 2
Author: camickr, 2017-05-30 18:32:59