2011-09-12 17 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); 

Agregué este cuadro combinado a un panel. Si agrego algunos elementos en la base de datos directamente, quiero que esos elementos recién agregados se muestren en el cuadro combinado.Agregando elementos dinámicamente a un JComboBox

Puedo ver los valores en comboBoxItems cuando depuro, pero esos valores no aparecen en mi cuadro combinado.

¿Cómo puedo obtener esos valores recién agregados en el cuadro combinado sin cerrar el panel?

+1

pregunta, JComboBox podría ser utilizado y en este mismo tiempo es/son añadido nuevos Artículo (s) – mKorbel

+0

Es * debería * trabajo - [He aquí un fragmento que utiliza el mismo constructor ] (http://www.java2s.com/Code/JavaAPI/javax.swing/newJComboBoxVectoritems.htm) –

+0

debe agregar los elementos al modelo, no al vector subyacente, ¡solo para que se activen las notificaciones requeridas! – kleopatra

Respuesta

26

¿Qué le parece usar el ComboBoxModel? Algo como esto ....

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

por ejemplo:

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

añadir dinámicamente elementos como JComboBox, JTextField y 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)); 

} 
Cuestiones relacionadas