Vector comboBoxItems = new Vector();
DefaultComboBoxModel model;
// ComboBox Items have gotten from Data Base initially.
model = new DefaultComboBoxModel(ComboBoxItems);
JComboBox box = new JComboBox(model);
J'ai ajouté cette liste déroulante à un panneau. Si j'ajoute directement des éléments dans la base de données, je souhaite que les éléments récemment ajoutés apparaissent dans la liste déroulante.
Je peux voir les valeurs dans comboBoxItems
lorsque je débogue, mais ces valeurs n'apparaissent pas dans ma liste déroulante.
Comment obtenir ces nouvelles valeurs ajoutées dans la liste déroulante sans fermer le panneau?
Que diriez-vous d'utiliser ComboBoxModel? Quelque chose comme ça....
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);
par exemple:
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();
}
});
}
}
Ajout dynamique d'éléments comme JComboBox, JTextField et ImageIcon
Après les secondes images sont affichées sur des éléments comme JComboBox, JTextField et 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));
}