Java 从另一个类更新swing组件
问题:无法从其他类更新swing组件 目标:当用户单击更新按钮时,“名称标签”中的文本将更改为“John Doe” 我尝试了stackoverflow关于这个问题的解决方案,但没有成功 这里有一个非常简单的例子,不确定我做错了什么 GUI.javaJava 从另一个类更新swing组件,java,swing,nullpointerexception,Java,Swing,Nullpointerexception,问题:无法从其他类更新swing组件 目标:当用户单击更新按钮时,“名称标签”中的文本将更改为“John Doe” 我尝试了stackoverflow关于这个问题的解决方案,但没有成功 这里有一个非常简单的例子,不确定我做错了什么 GUI.java package TestGUI.TestGUI; import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.
package TestGUI.TestGUI;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class GUI {
JLabel nameLabel;
JButton updateButton;
JFrame frame;
JPanel panel;
public void display() {
frame = new JFrame();
panel = new JPanel(new BorderLayout());
frame.setTitle("BlackJack Game");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
nameLabel = new JLabel("No Name");
updateButton = new JButton("Update");
panel.add(nameLabel, BorderLayout.NORTH);
panel.add(updateButton, BorderLayout.SOUTH);
updateButton.addActionListener(new EventListener());
}
public void setNameLabel(String name) {
nameLabel.setText(name);
}
}
EventListener.java
package TestGUI.TestGUI;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class EventListener implements ActionListener {
//private Card card;
private GUI gui;
public EventListener(GUI gui) {
this.gui = gui;
}
public EventListener() {
// TODO Auto-generated constructor stub
}
public void actionPerformed(ActionEvent actionEvent) {
String actionCommand = actionEvent.getActionCommand();
if(actionCommand.equals("Update")) {
gui.setNameLabel("John Doe");
}
}
}
App.java
package TestGUI.TestGUI;
public class App
{
public static void main( String[] args )
{
GUI gui = new GUI();
gui.display();
}
}
单击“更新”按钮时,会产生以下错误
我已经看过你的代码了。有一件事需要修改以解决此问题 在这段代码中,您有一个updateButton,它按照您定义的EventListener类中指定的方式执行操作 在类GUI的inside display()方法中,您正在将操作侦听器添加到updateButton中,如下所示
updateButton.addActionListener(new EventListener());
但是,在您定义的EventListener类中,此构造函数没有执行任何操作。您已经定义了另一个构造函数,它接受GUI类的对象,并用该类初始化类变量GUI。在actionPerformed()中,您正在同一gui对象上操作
因此,当您将EventListener()的对象添加到updateButton而不提供GUI类的对象时,EventListener类变量“GUI”在默认构造函数中保持未初始化状态,这就是当您单击update按钮时引发空指针异常的原因
因此,为了解决这个问题,需要在display()方法中传递希望更新的GUI类的引用。因此,如果您只是简单地进行此修改,它将按需要工作
updateButton.addActionListener(new EventListener(this));
我已经看过你的代码了。有一件事需要修改以解决此问题 在这段代码中,您有一个updateButton,它按照您定义的EventListener类中指定的方式执行操作 在类GUI的inside display()方法中,您正在将操作侦听器添加到updateButton中,如下所示
updateButton.addActionListener(new EventListener());
但是,在您定义的EventListener类中,此构造函数没有执行任何操作。您已经定义了另一个构造函数,它接受GUI类的对象,并用该类初始化类变量GUI。在actionPerformed()中,您正在同一gui对象上操作
因此,当您将EventListener()的对象添加到updateButton而不提供GUI类的对象时,EventListener类变量“GUI”在默认构造函数中保持未初始化状态,这就是当您单击update按钮时引发空指针异常的原因
因此,为了解决这个问题,需要在display()方法中传递希望更新的GUI类的引用。因此,如果您只是简单地进行此修改,它将按需要工作
updateButton.addActionListener(new EventListener(this));
瞧&瞧&啊,真是个愚蠢的错误,谢谢!啊,真是个愚蠢的错误,谢谢!