0
我在Java Gui應用程序中有多個JComboBoxes
。JComboBox - ActionPerformed - 如何區分用戶和代碼之間的區別?
我想在用戶更改組合框時觸發事件(我完成了這個工作,而且這個工作很棒)。
我的問題是,我還需要通過代碼偶爾更新組合框中的值,我不希望執行相同的事件。
如何判斷它的代碼或用戶是否觸發了這些監聽器?
我在Java Gui應用程序中有多個JComboBoxes
。JComboBox - ActionPerformed - 如何區分用戶和代碼之間的區別?
我想在用戶更改組合框時觸發事件(我完成了這個工作,而且這個工作很棒)。
我的問題是,我還需要通過代碼偶爾更新組合框中的值,我不希望執行相同的事件。
如何判斷它的代碼或用戶是否觸發了這些監聽器?
如何判斷它的代碼或用戶是否觸發了這些監聽器?
comboBox.removeActionListener(...);
// do your code here
comboBox.addActionListener(...);
一般來說,你不能。用於更改所選項目(您將調用)的方法也由UI代理響應用戶交互而調用。你可以設置一個標誌來告訴偵聽者狀態改變是以編程方式執行的,並且他們應該忽略這些更新(或者採取你想要的任何特殊的動作),但是它有點混亂,你需要要特別小心,以確保當你完成標誌休息,或者你可以打破你的申請 – MadProgrammer 2013-03-12 04:22:52
這不是我真正想要的答案,但它聽起來像它可能是正確的答案。如果您想以此作爲答案,我會繼續並接受它。我假設有46.5k的聲望,你知道你在說什麼。 – Doug 2013-03-12 04:26:04
不要假設任何事情,我靠摩托生活「假裝它,直到你做到」;) - 讓我們看看是否有其他人提出了一個更好的主意。事實上,在回答下一個問題時,我做到了。你可以使用['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