Mega Code Archive

 
Categories / Java / Swing JFC
 

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();   } }