2013-03-12 59 views
0

我在Java Gui應用程序中有多個JComboBoxesJComboBox - ActionPerformed - 如何區分用戶和代碼之間的區別?

我想在用戶更改組合框時觸發事件(我完成了這個工作,而且這個工作很棒)。

我的問題是,我還需要通過代碼偶爾更新組合框中的值,我不希望執行相同的事件。

如何判斷它的代碼或用戶是否觸發了這些監聽器?

+1

一般來說,你不能。用於更改所選項目(您將調用)的方法也由UI代理響應用戶交互而調用。你可以設置一個標誌來告訴偵聽者狀態改變是以編程方式執行的,並且他們應該忽略這些更新(或者採取你想要的任何特殊的動作),但是它有點混亂,你需要要特別小心,以確保當你完成標誌休息,或者你可以打破你的申請 – MadProgrammer 2013-03-12 04:22:52

+0

這不是我真正想要的答案,但它聽起來像它可能是正確的答案。如果您想以此作爲答案,我會繼續並接受它。我假設有46.5k的聲望,你知道你在說什麼。 – Doug 2013-03-12 04:26:04

+0

不要假設任何事情,我靠摩托生活「假裝它,直到你做到」;) - 讓我們看看是否有其他人提出了一個更好的主意。事實上,在回答下一個問題時,我做到了。你可以使用['JComboBox#putClientProperty'](http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#putClientProperty%28java.lang.Object,%20java.lang。對象%29)來存儲「標誌」狀態,這使它成爲一個「小」清潔器,因爲你不需要某種「全局」標誌或自定義組合框...... – MadProgrammer 2013-03-12 04:33:33

回答

1

如何判斷它的代碼或用戶是否觸發了這些監聽器?

comboBox.removeActionListener(...); 
// do your code here 
comboBox.addActionListener(...);