JButtonのdoClick()メソッドはactionPerformedメソッドをトリガーしますが、doClick()メソッドを使用してpaintComponent()をトリガーしたい!助けてください!JButtonのdoClick()メソッド
これはお勧めですか?ここでは、doClick()メソッドのアクションが実行されるたびにテキストが変更されているラベルがあります。しかし残念なことに、paintComponentメソッドはactionPerformed()メソッドと同じ回数を実行しません。これはAnswerとして提案されているコードです。私は実際にデータがファイルから読み込まれているときにdoClick()メソッドをトリガーし、テキストファイルのデータに従って異なる形状がペイントされます。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class myFrame {
JFrame jFrame;
myPanel bpanel;
JButton jbutton;
int radius;
JLabel label;
public myFrame() {
jFrame=new JFrame();
bpanel=new myPanel();
jbutton=new JButton("presss");
radius=50;
label=new JLabel(radius+" ");
bpanel.add(jbutton);
bpanel.add(label);
jbutton.addActionListener(new myButtonListener());
for (int i=0; i< 5; i++)
jbutton.doClick();
jFrame.getContentPane().add(bpanel);
jFrame.pack();
jFrame.setVisible(true);
}
public class myPanel extends JPanel {
public myPanel() {
setBackground(Color.cyan);
setPreferredSize(new Dimension(300,400));
}
public void paintComponent(Graphics g) {
System.out.println("paint component triggered");
super.paintComponent(g);
g.drawOval(0,0,radius,radius);
}
}
private class myButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
radius=radius+20;
label.setText(radius+" ");
bpanel.repaint();
System.out.println("mouse click event triggered");
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new myFrame();
}
});
}
}
なぜこれが必要ですか?いずれにせよ、ボタンに 'ActionListener'を追加するだけです:' button.addActionListener(e - > repaint()); ' – Moira
あなたのコードは、イベントディスパッチスレッドではなくメインスレッドからGUI操作を呼び出します。無効。初めてコンポーネントを描画する前に、すべての更新を呼び出しています。 – kdgregory
あなたが解決しようとしている*本当の問題は何ですか? – kdgregory