我有一个很大的问题,我试图解决它好几天了。我编写了一个小程序,但它没有工作。错误是Stackoverflow我已经搜索过这个网站了。我把它分解为不起作用的部分,所以这里是代码。 这是框架:
package snippet;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MyFrame extends JFrame {
JButton button;
JLabel label;
TextEdit textEdit = new TextEdit();
public void LetsGo() {
setBounds(0, 0, 800, 510);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Game");
setResizable(false);
setLocationRelativeTo(null);
//Labels
label = new JLabel();
label.setText("Change Me");
label.setBounds(30, 25, 200, 50);
label.setVisible(true);
add(label);
button = new JButton();
button.setText("I Will Change A Text");
button.setBounds(30, 130, 200, 400);
button.addActionListener(new Listener());;
add(button);
}
public class Listener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
textEdit.editTheText();
}
}
此对象应编辑文本:
package snippet;
public class TextEdit {
MyFrame frame = new MyFrame();
public void editTheText(){
frame.label.setText("Text was edited");
}
}
所以真正的代码要复杂得多,所以我不会把所有代码放在一个对象中 如果我得到一些帮助会非常非常感谢那将是很好的
答案 0 :(得分:0)
您正在MyFrame
中创建一个新的TextEdit
,我认为这不是您想要做的,因为frame.label
将是null
。
您真正应该做的是在JFrame
内分配Listener
。
public class Listener实现ActionListener {
private JFrame frame;
public Listener(JFrame frame) {
this.frame = frame;
}
@Override
public void actionPerformed(ActionEvent e) {
if (this.frame.label != null) {
this.frame.label.setText("Text was edited");
}
}
}
那么对于其他代码,您没有构造函数,或者您的实际类被称为LetsGo
?
假设它不是LetsGo
而实际上是MyFrame
,那么你需要一个实际的构造函数。
public MyFrame() {
LetsGo();
}
然后在LetsGo
方法中,将框架添加到Listener
button.addActionListener(new Listener(this));