Java 无法从其他类添加actionlistener
似乎我完全不明白这些东西是如何工作的……我有一个扩展JPanel并实现Actionlistener的类,然后我想将它添加到一个扩展JFrame的类中……我无法让它工作Java 无法从其他类添加actionlistener,java,swing,actionlistener,Java,Swing,Actionlistener,似乎我完全不明白这些东西是如何工作的……我有一个扩展JPanel并实现Actionlistener的类,然后我想将它添加到一个扩展JFrame的类中……我无法让它工作 public class testPanel extends JFrame implements ActionListener{ JButton someBtn; public testPanel(JButton someBtn){ this.someBtn = someBtn; add(someBtn);
public class testPanel extends JFrame implements ActionListener{
JButton someBtn;
public testPanel(JButton someBtn){
this.someBtn = someBtn;
add(someBtn);
someBtn.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e){
if(e.getSource() == someBtn)
System.out.println("this worked");
}
}
二等档案
public class JavaApplication3 extends JFrame{
/**
* @param args the command line arguments
*/
JButton button;
public JavaApplication3(){
super("blah");
JFrame p = new testPanel(button);
add(p);
pack();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
// TODO code application logic here
new JavaApplication3();
}
}
testPanel
中的这一行肯定会引发异常:
add(someBtn);
由于引用someBtn
为空
您从未在JavaApplication3
类中初始化按钮
实例变量,bzut在testPanel
类的构造函数中使用了该变量
但是,您希望得到此流的相反结果:
测试面板
类中创建按钮JavaApplication3
类获取引用,那么您需要在testPanel类中使用getterpublic class testPanel extends JFrame implements ActionListener{
JButton someBtn; //consider using private
public testPanel(){
this.someBtn = new JButton(); //add correct constructor here
add(someBtn);
someBtn.addActionListener(this);
}
public JButton getSomeBtn() {
reeturn someBtn;
}
//... rest comes here
}
public class JavaApplication3 extends JFrame{
JButton button;
public JavaApplication3(){
super("blah");
JFrame p = new testPanel();
button = p.getSomeBtn(); //this is the important line
add(p);
pack();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//... rest comes here
}
旁注:使用Java命名约定:类名以大写字母开头…您还没有初始化button实例变量…通常您希望包含您得到的实际错误。您的示例无法工作,两个类都从JFrame扩展