java - 监听器不起作用

标签 java swing model-view-controller

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

所以问题是框架对按钮单击没有反应。 (我编写的文本在单击后不会添加到 TextArea 中)

首先我调用 View 和 Controller 的构造函数

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

这是MessageFrameListener类( Controller )的一部分

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);
}


}

最佳答案

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

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

关于java - 监听器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10469880/

相关文章:

java - Play Framework vs Scooter Framework vs ActiveWeb——比较?

java - 使用 $and 和 $in 从 mongodb 检索结果

java - Scanner.reset() 不起作用

java - 如何递归地找到直方图中的最大矩形面积?

java - 如何使矩形按比例适合框架?

ruby-on-rails - 如何在事件提要中显示个人资料照片?

c# - 从数据库 :The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' 访问数据的 MVC 问题

java - 如何使用旧的订单 ID 格式在本地验证 Google 收据验证?

java - 添加一个将 JLabel 扩展到带有 gridlayout 的面板中的类

java - 自定义 TransferHandler 的 D&D 和 CCP 问题