Interface ActionListenerのActionPerformedメソッド内で呼び出されたときにgetGraphics()で描画することはできますが、コンストラクタなどのメソッドから呼び出されたメソッドでは描画できないのはなぜですか?ここに私が作ったコードがあります。なぜメソッド "dibujar"の呼び出しが "empezar"とコンストラクタの中で無視されますが、ActionListenerメソッドの中では無視されるのですか?getGraphicsがActionPerformedメソッド内で動作するのはなぜですか?
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;
}
私は再描画()メソッドを再描画するために、すべてのいつかと呼ばれていることを読んでいると、それは、dibujar()
がその作業を消去している()無視されますが、再描画されないことを意味しますが、それが起こるdoesntのなぜ呼び出しが内部で行われたときActionEvent?何らかのループを実行するか、またはrepaint()呼び出しを禁止することが何らかの暗黙的なものですか?