根据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);
}
}
答案 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("");