2

MVC モデルに従って、Java プログラムを作成しています。

問題は、フレームがボタンのクリックに反応しないことです。(私が書いたテキストは、クリック後に TextArea に追加されません)

最初に、ビューとコントローラーのコンストラクターを呼び出します

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


}
4

3 に答える 3

2

あなたはコード スクラップを投稿し、私たちがテストできる機能するSSCCEを投稿していないので、推測するしかありません。

間違った MessageFrame でリッスンしています。プログラムには 2 つ以上の MessageFrame オブジェクトがあり、そのうちの 1 つが表示され、もう 1 つがリッスンされているため、表示された MessageFrame がリスナーをトリップすることはありません。

これで問題が解決せず、より良いサポートが必要な場合は、より良い質問とsscceを提供してください。

于 2012-05-06T10:56:38.450 に答える
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 に答える