我想执行以下操作:只要特定变量(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。 我需要一个监听器或线程吗?最好的方法是什么?
答案 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
方法在哪里,或者你是否确实获得了roomName
和frame
的静态变量。)