Sharing a Model between a JList and JComboBox
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class ListIt {
final String partsList[][] = { { "Item 1", "10", "99c" },
{ "Item 2", "12", "$18.99" }, { "Item 3", "1", "$10.00" } };
class PartsListModel extends DefaultListModel implements ComboBoxModel {
Object currentValue;
public PartsListModel() {
for (int i = 0, n = partsList.length; i < n; i++) {
addElement(partsList[i]);
}
}
// ComboBoxModel methods
public Object getSelectedItem() {
return currentValue;
}
public void setSelectedItem(Object anObject) {
currentValue = anObject;
fireContentsChanged(this, -1, -1);
}
}
class MyLabelRenderer extends JLabel implements ListCellRenderer {
public MyLabelRenderer() {
setOpaque(true);
}
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
if (value != null) {
String values[] = (String[]) value;
String setting = values[0] + " / " + values[1] + " / "
+ values[2];
setText(setting);
}
setBackground(isSelected ? Color.BLUE : Color.WHITE);
setForeground(isSelected ? Color.WHITE : Color.BLUE);
return this;
}
}
public ListIt() {
JFrame f = new JFrame();
final PartsListModel pcm = new PartsListModel();
ListCellRenderer lcr = new MyLabelRenderer();
JList jl = new JList(pcm);
jl.setCellRenderer(lcr);
ListSelectionModel lsm = jl.getSelectionModel();
lsm.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jl.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
String element[] = (String[]) pcm.getElementAt(e
.getFirstIndex());
System.out.println(element[0] + " : " + element[1] + " : "
+ element[2]);
}
}
});
JScrollPane jsp = new JScrollPane(jl);
JComboBox jc = new JComboBox(pcm);
jc.setRenderer(lcr);
JButton jb = new JButton("Add Merchandise");
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
pcm.addElement(partsList[(int) (Math.random() * partsList.length)]);
}
});
Container c = f.getContentPane();
c.add(jsp, BorderLayout.NORTH);
c.add(jc, BorderLayout.CENTER);
c.add(jb, BorderLayout.SOUTH);
f.setSize(250, 250);
f.show();
}
public static void main(String args[]) {
new ListIt();
}
}
Related examples in the same category