2011-04-09 49 views
0

這裏有一個場景:清除最後選定值的JComboBox時的ComboBoxModel變空

我有兩個JComboBoxes(叫他們COMBO1和combo2),其從數據庫 [在DB獲得他們的價值觀,這兩個人有1:M的關係]。當屏幕上顯示出了我填充COMBO1從數據庫值,然後採取在列表中的第一項,並獲得其相應的值來填充combo2。

由於combo2的值取決於什麼是COMBO1選擇,每次在COMBO1呼叫時選擇的變化是對數據庫進行時間去匹配的值來填充combo2。

現在,這裏是一個問題:

說我有在COMBO1兩個條目,第二個條目有combo2沒有相應的值。當我選擇combo1的第二個條目時,combo2上的最後選定值不會清除。 [記住型號爲combo2是空的,所以應該沒有什麼選擇]

Qeustion:如何清除文本中combo2如果模型是空的?

這裏是一個示例代碼:

public void select(final Entry entry) { 
     if (entry == null) 
     return; 

     int index = entryList.indexOf(entry); // instance of SelectionInList from JGoodies 
     boolean positive = index >= 0 && index <= entryList.getSize() - 1; 

     if (positive) { 

       entryList.setSelection(entry); 


       subEntryList.setList(entryList.loadSubEntries(entry.getID())); 
       if (!subEntryList.isEmpty()) { 
        SubEntry e = subEntryList.getElementAt(0); 
        select(e); 
       } 
     } 

}

回答

1

如果你有一個空的組合框模型視圖應自動清除。如果您導出了自己的模型,請不要忘記在您刪除條目時致電DefaultComboBoxModel.fireIntervalRemoved()

另一個(在這種情況下不推薦)的方法是使用combobox.setSelectedItem(null);

+0

關於第一部分,是的,這是我一直認爲和現在這個問題。有趣的是,該模型表示沒有最後選擇的項目在UI上顯示。 – user276002 2011-04-09 13:57:23

+0

@ user276002它實際上。所以這個問題似乎是在你的代碼中的其他地方。請張貼相關部分,以便我們可以看看。 – Howard 2011-04-09 14:06:44

+0

這裏是我的代碼細分: 我正在使用JGoodies綁定,所以這裏是我將JComboBoxes綁定到相應模型的行: 'Bindings.bind(combo1,entryrModel.getEntryList()); Bindings.bind(combo2,entryModel.getSubEntryList());' – user276002 2011-04-09 14:36:15

0

當您在第一選擇重新裝上第二個組合框模型:

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 

public class ComboBoxTwo extends JFrame implements ActionListener 
{ 
    private JComboBox mainComboBox; 
    private JComboBox subComboBox; 
    private Hashtable subItems = new Hashtable(); 

    public ComboBoxTwo() 
    { 
     String[] items = { "Select Item", "Color", "Shape", "Fruit" }; 
     mainComboBox = new JComboBox(items); 
     mainComboBox.addActionListener(this); 

     // prevent action events from being fired when the up/down arrow keys are used 
//  mainComboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); 
     getContentPane().add(mainComboBox, BorderLayout.WEST); 

     // Create sub combo box with multiple models 

     subComboBox = new JComboBox(); 
     subComboBox.setPrototypeDisplayValue("XXXXXXXXXX"); // JDK1.4 
     getContentPane().add(subComboBox, BorderLayout.EAST); 

     String[] subItems1 = { "Select Color", "Red", "Blue", "Green" }; 
     subItems.put(items[1], subItems1); 

     String[] subItems2 = { "Select Shape", "Circle", "Square", "Triangle" }; 
     subItems.put(items[2], subItems2); 

     String[] subItems3 = { "Select Fruit", "Apple", "Orange", "Banana" }; 
     subItems.put(items[3], subItems3); 
//  mainComboBox.setSelectedIndex(1); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     String item = (String)mainComboBox.getSelectedItem(); 
     Object o = subItems.get(item); 

     if (o == null) 
     { 
      subComboBox.setModel(new DefaultComboBoxModel()); 
     } 
     else 
     { 
      subComboBox.setModel(new DefaultComboBoxModel((String[])o)); 
     } 
    } 

    public static void main(String[] args) 
    { 
     JFrame frame = new ComboBoxTwo(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
-1

只是這樣做:

jcombobox.setSelectedIndex(-1); 

後:

jcombobox.getSelectedIndex(); 
相關問題