在Java中做一些变量变化

时间:2013-05-10 08:56:41

标签: java multithreading swing jframe listener

我想执行以下操作:只要特定变量(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应该执行上面描述的Action。 我需要一个监听器或线程吗?最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

我想到的一个简单的解决方案是将变量包装到一个对象中,然后setter方法可以如下所示:

public void setNewValue(String newVal)
{
    if(!newVal.equals(currentVal)) {
        currentVal = newVal;
        // Value has changed. Call the relevant code.
    }
}

答案 1 :(得分:2)

您应该将ChatFrame变量设为私有,然后公开方法来更改它:

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

然后你可以为它添加一个监听器,并在方法中触发它。

请注意,这在逻辑上应该是实例变量,而不是目前看来的静态变量。

(如果那不是你想要的,请编辑你的问题。目前还不清楚,部分原因是我们不确定setName方法在哪里,或者你是否确实获得了roomNameframe的静态变量。)