2012-02-10 64 views
2

說我有一個JButton稱爲B和I:JButtons會自動更新嗎?

b.setText(""+someIntVariable) 

,我又把它add()到合適的JFrame。如果稍後我的程序更改了someIntVariable的值,那麼JButton的文本會在我的GUI中自動更新?或者我必須做些更新嗎?

+0

這將花費更少的時間來多試在這裏問。 – 2012-02-10 01:08:00

回答

3

將按鈕添加到JFrame後,它將顯示您將其作爲參數提供的原始文本。如果您想更改文字,則需要再次致電b.setText(""+someIntVariable)。但是,您不必將其add它給JFrame。

這是因爲您指的是存儲在someIntVariable中的,而不是變量本身。所以如果價值改變,它不會自動更新。

3

JButton的文本不會自動更新。它會獲得您使用""+someIntVariable創建的字符串表示形式。即使你只傳遞了int變量本身(這是不可能的,但我們假設它是),它將是整數的一個副本,而不是原始值。現在有辦法讓它獲得一個指向整數的指針,以查看原來的內容已經改變了,即使有辦法,整數也無法通知它已經改變的JButton

可能有方法來創建像這樣的按鈕。我不認爲使用JButton就是其中一種方式,但其他框架中可能會有按鈕類來處理這種情況。但是,你需要使用更復雜的數據類型爲你傳遞的變量

0

可以更改按鈕的標籤是這樣的:

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class demoframe extends JFrame implements ActionListener { 

    String label=new String("Init Label"); 
    JButton b1=new JButton(label); 
    JButton b2=new JButton("Action"); 
    demoframe() 
    { 
     this.add(b1); 
     this.add(b2); 
     b2.addActionListener(this); 
    } 
    public static void main(String arg[]) 
    { 
     demoframe d=new demoframe(); 
     d.setSize(200, 200); 
     d.setVisible(true); 
     d.setLayout(new FlowLayout()); 
    } 
    public void actionPerformed(ActionEvent e) 
    { 
     label="New Label"; 
     b1.setText(label); 
    } 
} 
+0

另請參見[初始線程](http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)。 – trashgod 2012-02-20 13:04:10