2010-02-01 40 views
1

我的選擇搖擺組合框有一個完全正常的ArrayList<MyObject>我需要編輯並選擇從一個對象。以「沒有下文的」

在應用程序窗口,我有一個JComboBox來從列表中選擇合適的選擇。我正在爲這些對象編寫一個編輯器對話框,其中只包含這些對象和編輯器字段的一個JList。這很容易做到;我只需要實現某種ListModel。堅持ArrayList,通過通常的字段訪問它。 GUI列表中的東西是實際列表中東西的1:1表示。簡單。

但是在主應用程序窗口的組合框讓我有點頭疼,因爲我需要一個特殊的價值。理想情況下,列表中的第一項應爲「(無)」,並返回null

難道我只需要編寫某種怪異ComboBoxModel實現這個的,或者是有一個更簡單的,已經實施的方式做到這一點?我一定會想到之前出現這種情況。

+1

使用toString()對象來顯示組合中的相應內容? – Bozho 2010-02-01 09:14:28

回答

2

實現自己ComboBoxModel應該是很容易的。

由於該解決方案創建從ArrayList,更改yourArrayList創建Vector後,將不可見在JComboBoxVector。如果你需要這個,那麼你必須實現你自己的ComboBoxModel(見DefaultComboBoxModel實現)。

無論如何,你將不得不這樣做,因爲沒有DefaultComboBoxModel構造函數需要List

class SpecialComboBoxModel extends DefaultComboBoxModel { 
    public final static String NULL_ELEMENT = "<None>"; 

    public SpecialComboBoxModel(Vector v) { 
     super(v); 
    } 

    @Override 
    public int getSize() { 
     return super.getSize() + 1; 
    } 

    @Override 
    public Object getElementAt(int index) { 
     if(index == 0) { 
      return NULL_ELEMENT; 
     } 
     return super.getElementAt(index - 1); 
    } 
} 


    ArrayList<String> yourArrayList = new ArrayList<String>(); 
    yourArrayList.add("Value1"); 
    yourArrayList.add("Value2"); 
    Vector<String> v = new Vector<String>(yourArrayList); 
    dropdown.setModel(new SpecialComboBoxModel(v)); 
+0

對不起,回覆非常慢,但是非常感謝你。我可能需要更多的工作來處理這個代碼,以彌合ArrayList/Vector的區別,但是您的解決方案基本上是我正在尋找的,現在似乎正在工作。 – wwwwolf 2010-03-11 22:29:49

0

您可能想要使用空對象。例如

public class MyObject { 
    public static final MyObject NULL_OBJECT = new MyObject(); 

    .. 
} 

,然後在ArrayList只要致電:

arrayList.add(0, MyObject.NULL_OBJECT); 

你空對象應該具有的所有屬性設置爲null(或一些合理的默認值),以及您toString()方法(如果你正在使用它),如果所有的字段都是null,應該返回「(none)」。

+0

這是做這件事的一種方式,儘管在ArrayList被保存時會引起一些頭痛的問題。我爲此使用普通的普通JAXB調用。另外,如果數組列表有一個空對象作爲第一項,它也可能會出現在列表編輯器中。這可能會涉及大量的手動添加和清除空對象的工作... – wwwwolf 2010-02-01 09:27:28

+0

啊,JAXB進入圖片。至少提供一些代碼部分,以便我們能夠給出足夠的答案。 – Bozho 2010-02-01 13:30:57