gpt4 book ai didi

java - 从另一个类更新 swing 组件

转载 作者:行者123 更新时间:2023-12-02 09:03:49 24 4
gpt4 key购买 nike

问题:无法从另一个类更新 swing 组件。

目标:当用户点击更新按钮时,“nameLabel”中的文本将更改为“John Doe”。

我尝试了 stackoverflow 上有关此问题的解决方案,但没有成功。

这是一个非常简单的例子,不确定我做错了什么。

GUI.java

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");
}

}
}

应用程序.java

package TestGUI.TestGUI;

public class App
{
public static void main( String[] args )
{
GUI gui = new GUI();

gui.display();
}
}

单击“更新”按钮时会产生以下错误。

enter image description here

最佳答案

我已经看到你的代码了。要解决此问题,需要修改一件事。

在此代码中,您有一个 updateButton,它按照您定义的 EventListener 类中指定的方式执行操作。

在 GUI 类的 display() 方法中,您将操作监听器添加到 updateButton 中,如下所示

 updateButton.addActionListener(new EventListener());

但是,在您定义的 EventListener 类中,此构造函数没有执行任何操作。您定义了另一个构造函数,它接受 GUI 类的对象并用它初始化类变量 gui 。在actionPerformed()中,您正在同一个gui对象上进行操作。

因此,当您将 EventListener() 的对象添加到 updateButton 而不提供 GUI 类的对象时,EventListener 类变量 'gui' 在默认构造函数中保持未初始化状态,这就是为什么当您单击时会抛出空指针异常更新按钮。

因此,为了解决这个问题,您需要在 display() 方法中传递您希望更新的 GUI 类的引用。因此,如果您简单地进行此修改,它将按预期工作。

updateButton.addActionListener(new EventListener(this));

关于java - 从另一个类更新 swing 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59979106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com