2011-09-12 169 views
10
Vector comboBoxItems = new Vector(); 
DefaultComboBoxModel model; 
// ComboBox Items have gotten from Data Base initially. 
model = new DefaultComboBoxModel(ComboBoxItems); 
JComboBox box = new JComboBox(model); 

我將此組合框添加到面板。如果我直接在數據庫中添加一些項目,我希望組合框中顯示新添加的項目。動態添加項目到JComboBox

我可以在調試時看到comboBoxItems中的值,但這些值不出現在我的組合框中。

如何在不關閉面板的情況下將這些新增值添加到組合框中?

+1

問題,JComboBox中可以使用,在這同一時間/添加新的項目(S) – mKorbel

+0

它*應*工作 - [這是一個使用相同構造的一個片段](http://www.java2s.com/Code/JavaAPI/javax.swing/newJComboBoxVectoritems.htm) –

+0

您必須將這些項目添加到模型中,而不是添加到底層向量 - 只有這樣才能激發所需的通知! – kleopatra

回答

26

如何使用ComboBoxModel?事情是這樣的....

JFrame frame = new JFrame("Combo Box Demo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(200, 200); 
    frame.setLayout(new FlowLayout()); 

    Vector comboBoxItems=new Vector(); 
    comboBoxItems.add("A"); 
    comboBoxItems.add("B"); 
    comboBoxItems.add("C"); 
    comboBoxItems.add("D"); 
    comboBoxItems.add("E"); 
    final DefaultComboBoxModel model = new DefaultComboBoxModel(comboBoxItems); 
    JComboBox comboBox = new JComboBox(model); 
    frame.add(comboBox); 

    JButton button = new JButton("Add new element in combo box"); 
    frame.add(button); 
    button.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent ae) { 
      model.addElement("F"); 
     } 
    }); 

    frame.setVisible(true); 
4

例如:

enter image description here enter image description here enter image description here

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

public class ComboBoxSorted extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private JComboBox comboBox; 
    private JTextField textField; 

    public ComboBoxSorted() { 
     textField = new JTextField(15); 
     textField.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       comboBox.addItem(textField.getText()); 
       textField.setText(""); 
       comboBox.showPopup(); 
      } 
     }); 

     String[] items = {"one", "two", "three", "four", "five"}; 
     SortedComboBoxModel model = new SortedComboBoxModel(items); 
     comboBox = new JComboBox(model); 
     comboBox.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); 
     JFrame frame = new JFrame("Add Item on Runtime"); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.add(comboBox, BorderLayout.SOUTH); 
     frame.add(textField, BorderLayout.WEST); 
     frame.add(new JLabel("Enter to add Item "), BorderLayout.EAST); 
     frame.pack(); 
     frame.setLocation(150, 150); 
     frame.setVisible(true); 
    } 

    private class SortedComboBoxModel extends DefaultComboBoxModel { 

     private static final long serialVersionUID = 1L; 

     public SortedComboBoxModel() { 
      super(); 
     } 

     public SortedComboBoxModel(Object[] items) { 
      Arrays.sort(items); 
      int size = items.length; 
      for (int i = 0; i < size; i++) { 
       super.addElement(items[i]); 
      } 
      setSelectedItem(items[0]); 
     } 

     public SortedComboBoxModel(Vector items) { 
      Collections.sort(items); 
      int size = items.size(); 
      for (int i = 0; i < size; i++) { 
       super.addElement(items.elementAt(i)); 
      } 
      setSelectedItem(items.elementAt(0)); 
     } 

     @Override 
     public void addElement(Object element) { 
      insertElementAt(element, 0); 
     } 

     @Override 
     public void insertElementAt(Object element, int index) { 
      int size = getSize(); 
      // Determine where to insert element to keep model in sorted order    
      for (index = 0; index < size; index++) { 
       Comparable c = (Comparable) getElementAt(index); 
       if (c.compareTo(element) > 0) { 
        break; 
       } 
      } 
      super.insertElementAt(element, index); 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       ComboBoxSorted comboBoxSorted = new ComboBoxSorted(); 
      } 
     }); 
    } 
} 
0

動態添加像的JComboBox,JTextField的項目和ImageIcon的

Please,Show this image on display, how many items added or Table Fields size

After second images are display on Items like JComboBox,JTextField and ImageIcon

for example : count=3 
//Dynamically Adding Items or Component above method 
public void dya_addcomp(int count) 
{ 
//Dynamicly Drop/Delete icon 
BufferedImage Drop_Tablefield = null; 
try { 
    Drop_Tablefield = ImageIO.read(this.getClass().getResource("/images/drop.png")); 
} catch (IOException ex) { 
    msg(" Error: drop and edit icon on Table, "+ex); 
} 
//count Items for loop executed.. 
for(int i=0;i<count;i++) 
{ 
    //cnt++; 
    //lblcount.setText("Count : "+cnt); 
    JTextField txtcolnm=new JTextField("",20); 
    JComboBox cmbtype=new JComboBox(); 
    JTextField txtcolsize=new JTextField("",20); 

    JButton Drop_Table_Field = new JButton(new ImageIcon(Drop_Tablefield)); 

    cmbtype.addItem("INTEGER"); cmbtype.addItem("FLOAT"); 
    cmbtype.addItem("STRING"); cmbtype.addItem("BOOLEAN"); 

    colnamepanel.add(txtcolnm); colnamepanel.add(cmbtype); 
    colnamepanel.add(txtcolsize); colnamepanel.add(Drop_Table_Field); 

    colnamepanel.setAutoscrolls(true); 

    //refresh panel 
    colnamepanel.revalidate(); 
    colnamepanel.repaint(); 

    //set the layout on Jpanel 
    colnamepanel.setLayout(new FlowLayout(FlowLayout.LEFT,5,0)); 

}