堆栈溢出错误GUI编程

时间:2016-01-11 20:17:08

标签: java object settext

我有一个很大的问题,我试图解决它好几天了。我编写了一个小程序,但它没有工作。错误是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");
    }
}

所以真正的代码要复杂得多,所以我不会把所有代码放在一个对象中 如果我得到一些帮助会非常非常感谢那将是很好的

1 个答案:

答案 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));