听众不起作用

时间:2012-05-06 10:35:59

标签: java swing model-view-controller

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

所以问题是Frame不会对按钮点击做出反应。 (我写的文本在点击后没有添加到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类(View)

中的部分
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);
}


}

3 个答案:

答案 0 :(得分:2)

由于你发布了代码片段并且没有发布我们可以测试的功能SSCCE,我们所能做的只是猜测 - 所以你会得到你付出的代价,这就是我的猜测:

您正在侦听错误的MessageFrame。您的程序有2个或更多MessageFrame对象,其中一个显示,另一个正在被监听,因此您显示的MessageFrame将永远不会使监听器跳闸。

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

答案 1 :(得分: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);

答案 2 :(得分: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("");