Swing JButton在actionPerformed方法上不起作用



我有一个初学者项目。这一次我从基础开始。

源代码:https://github.com/kontext66/GuwiPos/blob/main/GuwiPos

该按钮在lambda方法下运行良好:buttonBasket.addActionListener(e -> System.out.println("Item Added to Basket!: ");

但是,当我尝试在这里使用actionPerformed来打印txtGroup的内容时,它不会显示任何内容。

这是按钮和文本字段[1] :https://i.stack.imgur.com/ADqVp.png

按钮:

JButton buttonBasket = new JButton();
buttonBasket.setBounds(0,0,300,50);
buttonBasket.setText("Add to Basket");
buttonBasket.setFocusable(false);
buttonBasket.setBorder(BorderFactory.createEtchedBorder());   
buttonBasket.addActionListener(this);

文本字段:

JTextField txtGroup = new JTextField();
txtGroup.setBounds(130,35,150,40);

actionPerformed

@Override
public void actionPerformed(ActionEvent e ){
if(e.getSource()==buttonBasket){            
System.out.println("Added Item to Basket: "+txtGroup.getText());
}

仔细阅读您的代码,我看到您在构造函数中声明了一个实例变量buttonBasket,然后声明一个局部变量buttonBasket。当您调用buttonBasket.addActionListener(this)时,您实际上是在向本地buttonBasket添加侦听器,而全局buttonBasketnull

public class GuwiPos extends JFrame implements ActionListener{

JButton buttonBasket;

GuwiPos(){
JButton buttonBasket = new JButton();  // <=== local variable buttonBasket
buttonBasket.addActionListener(this);
}

public void actionPerformed(ActionEvent e ){
if(e.getSource()==buttonBasket){    //<== buttonBasket is null         
System.out.println("Added Item to Basket: "+txtGroup.getText());
}
}

}

解决方案是更改线路:

JButton buttonBasket = new JButton();

buttonBasket = new JButton();

最新更新