Dessiner un objet en utilisant getGraphics () sans étendre JFrame
Comment puis-je dessiner un objet sans classe, qui s'étend JFrame
)? J'ai trouvé getGraphics
méthode, mais il ne marche pas dessiner l'objet.
import javax.swing.*;
import java.awt.*;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(600, 400);
JPanel panel = new JPanel();
frame.add(panel);
Graphics g = panel.getGraphics();
g.setColor(Color.BLUE);
g.fillRect(0, 0, 100, 100);
}
}
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Si vous voulez changer la façon dont votre composant est en cours d'élaboration (vous ajoutez des rectangles), vous devez redéfinir
paintComponent()
dans le composant. Dans votre code, vous utilisezgetGraphics()
.Vous ne devez pas appeler
getGraphics()
sur un composant. Toute la peinture que vous faites (à laGraphics
retournés) sera temporaire et sera perdu, la prochaine fois Swing détermine un composant a besoin d'être repeint.Au lieu de cela, vous devez remplacer le
paintComponent(Graphics)
méthode (de laJComponent
ouJPanel
), et de faire de la peinture dans cette méthode, à l'aide de laGraphics
objet reçu en argument.Vérifier ce lien pour plus de lecture.
Ci-dessous votre code, corrigé.
Une autre version, le exactement la même chosemais peut-être plus clair pour vous:
Vous avez à redéfinir la méthode paintComponent dans un Composite de classe. Vous devez donc créer une classe qui étend Composite et de redéfinir la méthode paintComponent dans la sous-classe
java.awt.image.BufferedImage
Pourquoi ne pas simplement utiliser une instance de
java.awt.image.BufferedImage
? par exemple,