2013-07-10 25 views
1

我想防止在用戶選擇已在JComboBox中選擇的值時觸發事件。防止從JComboBox中通知偵聽器中選擇當前選擇

例如,假設我有一個JComboBox其模式具有以下值:

當前選擇的值是「Cat」。如果用戶再次選擇「貓」,而「貓」已被選中,我想阻止收聽者收到通知。

我試圖通過在模型中添加一個檢查setSelectedItem(Object)來實現這一點。但是這並沒有奏效。

我的下一個假設是,如果我想要這個功能,我將需要子類JComboBox並覆蓋它的setSelectedItem(Object)contentsChanged(ListDataEvent)函數。

但是,鑑於contentsChanged(ListDataEvent)的文檔,我很猶豫要重寫它。因此我對你們所有的問題:

有沒有更好的方式來獲得,不需要子分級JComboBox並重寫它的setSelectedItem(Object)contentsChanged(ListDataEvent)此功能所需的功能?

+0

*「我想防止的動作被解僱的事件..「*爲什麼?或者說:爲什麼不在這種情況下忽略它呢?好像你已經把馬車放在馬前了。 –

+1

這很容易,創建一個變量保存選定的值,在下一次選擇後,將其與選定值進行比較,它是等於,*什麼都不做*,否則,將選定的值賦值給它並*執行您的操作*。 – Azad

+0

這些JComboBox用於在其他對象中設置值,這些對象本身會觸發其他事件。另一個問題是我沒有意識到這種情況直到最近纔會發生,所以我的代碼不會爲此進行測試。另外,我的模型是這樣的,它具有「禁用」的值。如果我能找到一種方法來做到這一點,那麼我也可以防止在任何地方沒有進行額外的測試時選擇這些「禁用」的值。 – Legowaffles

回答

2

我想防止一個動作事件從當用戶選擇 中的JComboBox已經選擇的值被解僱。

  • 使用ItemListener

  • 渦卷代碼到if (e.getStateChange() == ItemEvent.SELECTED) {如圖所示,在Oracle教程中描述

  • for example

+0

按原來,問題文本,這正是問題的答案。不幸的是,我的意圖溝通不暢,所以這並不能完全解決我的問題。 – Legowaffles

+0

+1對於你的答案,IMO *仍*回答實際需要,如果不是..問題。 –

+0

1.我看到你的問題的評論,二不這樣做的JComboBox是複合的JComponent,散架了一樣的珠子,通過@Andrew湯普森3 re_read評論 - 好像你已經把車前馬後。 4.不要模擬ItemListener – mKorbel