3

私は次のことをしたい: 特定の変数 (roomName) がその値を変更するとすぐに、JFrame のタイトルを roomName の新しい値に変更する必要があります。私の唯一の問題は、roomName が変更される前に JFrame が既にビルドされていることです。

これは、私の Connection.java クラスの小さなスニペットです。

public Connection() {
    ...
    fieldName.addKeyListener(new KeyListener() {
        public void keyPressed(KeyEvent e) {
            if(e.getKeyChar() == KeyEvent.VK_ENTER) {
                setName();
            }
        }
    });
}

public void setName(){
    ChatFrame.frame.setVisible(true);
    ChatFrame.roomName = fieldName.getText();
    this.dispose();
}

もう一方のクラス ChatFrame.java は、上記のアクションを実行する必要があります。これにはリスナーまたはスレッドが必要ですか? それを行う最良の方法は何ですか?

4

2 に答える 2

3

頭に浮かぶ簡単な解決策の 1 つは、変数をオブジェクトにラップすることです。その場合、setter メソッドは次のようになります。

public void setNewValue(String newVal)
{
    if(!newVal.equals(currentVal)) {
        currentVal = newVal;
        // Value has changed. Call the relevant code.
    }
}
于 2013-05-10T09:00:55.777 に答える
2

最初に変数をプライベートにして、それを変更するメソッドChatFrameを公開する必要があります。

public void setRoomName(String newName) {
    ...
}

次に、そのためのリスナーを追加し、メソッド内でトリガーできます。

これは、現時点では静的変数ではなく、論理的にインスタンス変数である必要があることに注意してください。

setName(それがあなたが探していたものではない場合は、質問を編集してください。メソッドがどこにあるのか、または実際roomNameにとの静的変数があるかどうかがわからないため、現時点では非常に不明ですframe。)

于 2013-05-10T09:00:13.973 に答える