gpt4 book ai didi

Java 另一个静态/非静态问题

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:33:14 25 4
gpt4 key购买 nike

好的,使用 Eclipse IDE 并在静态/非静态问题上被绊倒了。我想我明白了,但不完全,这是代码。

第一部分,主要是使用 swing UI 生成器创建的。 编辑掉评论/导入

public class Screen {

private JFrame frame;
public JLabel lblNewLabel;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Screen window = new Screen();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

public Screen() {
initialize();
}

void initialize() {
XListener listenItem = new XListener("Woot"); // creates listen object

frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);

JLabel lblNewLabel = new JLabel("New label");
lblNewLabel.setBounds(193, 154, 56, 16);
frame.getContentPane().add(lblNewLabel);

JButton btnNewButton = new JButton("New button");
btnNewButton.setBounds(163, 73, 97, 25);
frame.getContentPane().add(btnNewButton);
btnNewButton.addActionListener(listenItem); // attaches it to listen object
}
void changeLabel(String setString) {
lblNewLabel.setText(setString);
}
}

第二部分是监听类

// creates class for listen item
public class XListener implements ActionListener {
String foo;
XListener(String setString) {
foo = setString;
}
public void actionPerformed(ActionEvent btnNewButton) {
**Screen.changeLabel(foo);**
}
}

它提示无法从类型 Screen 对非静态方法 changeLabel(String) 进行静态引用。然而,如果我使用窗口代替屏幕,它找不到对象。这让我非常困惑。我理解代码的方式是,主要方法创建一个名为 window 的 Screen 对象,该对象在初始化时还会创建一个 XListener 对象。为什么它认为 actionPerformed 方法是静态的?我知道我缺少一些基本的东西,而且我一直在关注 Java“踪迹”,但就是不明白。

最佳答案

您应该传入对要在操作发生时影响的 Screen 对象的引用:

// creates class for listen item
public class XListener implements ActionListener {
String foo;
Screen myScreen;

XListener(String setString, Screen scr) {
foo = setString;
myScreen = scr;
}
public void actionPerformed(ActionEvent btnNewButton) {
myScreen.changeLabel(foo);
}
}

然后,像这样初始化你的监听器:

XListener listenItem = new XListener("Woot", this);

您必须这样做,因为 changeLabel() 方法是 Screen 类上的实例方法,但您正试图像访问 一样访问它静态 方法。通过访问正确的 Screen 实例,您可以正确调用该方法。

关于Java 另一个静态/非静态问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7098782/

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