0
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
class Painter extends JPanel implements ActionListener{
private int x = 30, y = 30;
//remove the blocked comment to make it run
/*public Painter(){
Buttons b = new Buttons(new String("Click to paint"));
b.addActionListener(this);
add(b);
}*/
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(new Color(44,55,66));
g.fillRect(200,200,x,y);
}
public void actionPerformed(ActionEvent e){
x = 600;
y = 600;
repaint();
}
}
import javax.swing.JButton;
public class Buttons extends JButton{
public Buttons(String Tag){
super(Tag);
setBounds(20, 20, 150, 50);
Painter p = new Painter();//comment it out
addActionListener(p);//comment it out
}
}
import java.awt.Color;
import javax.swing.JFrame;
public class Window extends JFrame{
public Window(){
Buttons b = new Buttons("Click Me");//comment it out
Painter p = new Painter();
getContentPane().add(b);//comment it out
getContentPane().add(p);
getContentPane().setBackground(Color.WHITE);
setSize(700,700);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
public class PaintOnEvent {
public static void main(String[] args){
Window w = new Window();
}
}
これはテストプログラムです。 addActionListener()
メソッドを使用してButtonsクラスにPainter
クラスを登録しましたが、なぜそれでもactionperformed
メソッドを探すことができないのですか?その後、ペインタクラス自体にボタンを作成すると、それは機能しました。それはなぜそうですか?ボタンがリスナークラスを見つけることができません
実際には2つの画家インスタンスがあります。しかし、あなたが言ったようにしたら、ボタンが頻繁に表示されます。それはボタンとパネルが別々にウィンドウに追加されているからでしょうか? – Gopal
コードにレイアウトの問題があります。 ButtonのsetBoundsメソッドを削除し、適切なレイアウトマネージャを使用することは、おそらく多くの助けになります。あなたはトップレベルのウィンドウcontentPaneがデフォルトでBorderLayoutを使用していることを理解する必要があるので、これに関係なくコンポーネントを追加すると問題に遭遇します。 –
たとえば、BorderLayoutを考慮したレイアウトマネージャの変更については、上のコード補遺を参照してください –