2011-12-02 93 views
0

我想改变按钮文字,当我点击它,但它不会出现在GUI上。在intellje IDE中,我可以看到它已更改,但为什么不显示在GUI中? 这是代码剪断:如何更改JButton属性?

final WebLabel loading = new WebLabel("Disconnected...", IconLib.ICON_19X17_THICK_ARROW_RIGHT_LIGHTBLUE.getIcon(), SwingConstants.CENTER); 
final WebLabel ipLabel = new WebLabel(host); 
final JPanel horizontalMiddlePanel = new JPanel(); 
final WebButton disconnect = new WebButton("Connect", IconLib.ICON_16X16_QUESTIONMARK_ON_BLUE_CIRCLE.getIcon()); 
    disconnect.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      if (loading.getText().equals("Connected...")) { 
       loading.setText("Disconnected..."); 
       loading.setIcon(IconLib.ICON_19X17_THICK_ARROW_RIGHT_LIGHTBLUE.getIcon()); 
       disconnect.setText("Connect"); 

      } else { 
       loading.setText("test"); 
       loading.setIcon(IconLib.ICON_19X17_THICK_ARROW_RIGHT.getIcon()); 
       ipLabel.setText(ipLabel.getText().replace(" Unreachable try again","")); 
       ipLabel.setForeground(Color.green); 
       disconnect.setText("Connecting"); 
       callflexConnection(ipLabel, 3001, loading, disconnect); 
      } 
     } 
    }); 
+4

是什么WebLabel和WebButton? –

回答

0

这是很难说,如果这是你目前的问题或没有的来源,但执行的基础上的一个按钮当前文本代码逻辑是做事情站不住脚的方式。您应该将该连接状态保持在专用变量中。

setConnState(CONN_DISCONNECTED); 

然后你就可以通过检查connState稳健推理程序的当前状态:事情是这样的:建立在GUI的按钮上的文字和connState初始化

private enum ConnState { 
    CONN_DISCONNECTED, 
    CONN_CONNECTING, 
    CONN_CONNECTED, 
}; 

private ConnState connState; 

private void setConnState(ConnState connState) { 
    this.connState = connState; 
    switch (connState) { 
    case CONN_DISCONNECTED: 
     loading.setText("Disconnected"); 
     disconnect.setText("Connect"); 
     break; 
    case CONN_CONNECTING: 
     loading.setText(...etc...); 
     disconnect.setText(...); 
     break; 
    case CONN_CONNECTED: 
     loading.setText(...); 
     disconnect.setText(...); 
     break; 
    } 
} 

并称之为变量,而不必在任何地方同步按钮字符串。

+0

你似乎知道'WebLabel'和'WebButton'是什么,也许你可以重写或添加标签的问题? –

+0

@Oleg:它们看起来是JButton的扩展,但我不知道。 – Boann

2

比不可能没有劈裂的代码来将两个部分

1)更新JButton#setText

然后通过delaing执行的代码

  • 其余

    2)通过使用javax.swing.Timer

  • 执行SwingWorker
  • 包内Runnble#Thread

3)这个代码是在美国东部时间执行,那么所有的修改是在美国东部时间完成,最终在相同/一个时刻