2

根据 MVC 模型,我正在编写一个 Java 程序。

所以问题是框架对按钮点击没有反应。(点击后我写的文字没有添加到TextArea)

起初我调用 View 和 Controller 的构造函数

                MessageFrame mf = new MessageFrame(con);
                MessageFrameListener mfl = new MessageFrameListener(mf);

这是 MessageFrameListener 类(控制器)的一部分

public class MessageFrameListener{
private MessageFrame mf;

public MessageFrameListener(MessageFrame m_f){
    mf = m_f;
    m_f.addButtonListener(new SButtonListener());
}

//@Override
public class SButtonListener implements ActionListener{
    public void actionPerformed(ActionEvent e) {
            String insert = mf.getInput();
            mf.addLine(insert);
            mf.refreshInput();
    }
}
}

这是 MessageFrame 类(视图)的部分

public class MessageFrame{

public JTextField messField;
public JTextArea dialogArea;
public JButton sendButton;
public JFrame frame;
public Contact con;
public MessageFrame (Contact con_get) {
    con = con_get;
    frame = new JFrame();

  frame.setSize(538, 299);

  JPanel panel_1 = new JPanel();
  frame.getContentPane().add(panel_1, BorderLayout.NORTH);

  JPanel panel_2 = new JPanel();
  frame.getContentPane().add(panel_2, BorderLayout.SOUTH);
  panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.X_AXIS));

  messField = new JTextField();
  panel_2.add(messField);
  messField.setColumns(10);

  JButton sendButton = new JButton("Send");
  panel_2.add(sendButton);

  JPanel panel_3 = new JPanel();
  frame.getContentPane().add(panel_3, BorderLayout.EAST);

  JPanel panel_4 = new JPanel();
  frame.getContentPane().add(panel_4, BorderLayout.CENTER);
  panel_4.setLayout(new BorderLayout(0, 0));

  JTextArea dialogArea = new JTextArea();
  panel_4.add(dialogArea);
  frame.setVisible(true);


}

public String getInput(){
    return messField.getText();
}

public void refreshInput(){
    messField.setText("");
}

public void addLine(String line){
    dialogArea.append(line);
}

public void addButtonListener(ActionListener bal){
    sendButton.addActionListener(bal);
}


}
4

3 回答 3

2

由于您已经发布了代码碎片并且还没有发布我们可以测试的正常运行的SSCCE,我们所能做的就是猜测——所以你会得到你所支付的,这是我的猜测:

您正在收听错误的 MessageFrame。您的程序有 2 个或更多 MessageFrame 对象,其中一个显示,另一个正在收听,因此您显示的 MessageFrame 永远不会绊倒听众。

如果这没有帮助,并且您需要更好的帮助,请向我们提供更好的问题和sscce

于 2012-05-06T10:56:38.450 回答
2

如果您检查程序的输出或调试它,您肯定会找到答案。

Exception in thread "main" java.lang.NullPointerException
    at test3.MessageFrame.addButtonListener(Main.java:93)
    at test3.MessageFrameListener.<init>(Main.java:28)
    at test3.Main.main(Main.java:18)

您通过在构造函数中再次声明它来隐藏对 JButton sendButton 的引用,因此该字段永远不会被初始化。

JButton sendButton = new JButton("Send");
panel_2.add(sendButton);
于 2012-05-06T11:03:54.130 回答
1

您正在添加一个空字符串:

String insert = mf.getInput(); //all it does is: messField.getText();
mf.addLine(insert); //adding the empty string
mf.refreshInput(); //all it does is: messField.setText("");
于 2012-05-06T10:39:40.367 回答