Warum ist es möglich, mit getGraphics() zu zeichnen, wenn in der Methode ActionPerformed von Interface ActionListener aufgerufen wird, aber nicht innerhalb einer Methode, die vom Konstruktor oder einer anderen Methode aufgerufen wird. Hier ist der Code, den ich gemacht habe. Warum werden die Aufrufe der Methode "dibujar" in "empezar" und Konstruktor ignoriert, aber nicht in der ActionListener-Methode?Warum funktioniert getGraphics in einer ActionPerformed-Methode?
import javax.swing.*;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class VentanaGrafica extends JFrame{
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
new VentanaGrafica().setVisible(true);
}
});
}
public VentanaGrafica(){
empezar();
dibujar();
}
private void empezar(){
setTitle("Graficar con Jpanel");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setMinimumSize(new Dimension(600,600));
setResizable(false);
panel = new JPanel();
panel.setBackground(Color.blue);
panel.setSize(new Dimension(400,400));
boton = new JButton("Este boton");
boton.setFocusable(false);
panel.add(boton);
add(panel);
boton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
dibujar();
}
});
pack();
dibujar();
}
private void dibujar(){
gc = panel.getGraphics();
gc.setColor(Color.red);
gc.fillRect(200,0,120,80);
}
JPanel panel;
Graphics gc;
JButton boton;
}
Ich habe gelesen, dass die repaint() -Methode jedes irgendwann neu streichen genannt wird und es bedeutet, dass dibujar()
nicht ignoriert, sondern neu streichen() haben ihre Arbeit gelöscht, aber warum es passieren tut, wenn der Anruf innerhalb der gemacht Aktionsereignis? es ist irgendwas implizit, eine Art Schleife zu machen oder den repaint() Aufruf zu verhindern?