Mega Code Archive

 
Categories / Java / Swing Components
 

Stepped ComboBox Example

// Example from http://www.crionics.com/products/opensource/faq/swing_ex/SwingExamples.html /* (swing1.1) */ import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Rectangle; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Vector; import javax.swing.ComboBoxModel; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.UIManager; import javax.swing.plaf.basic.BasicComboPopup; import javax.swing.plaf.basic.ComboPopup; import javax.swing.plaf.metal.MetalComboBoxUI; /**  * @version 1.0 12/12/98  */ public class SteppedComboBoxExample extends JFrame {   public SteppedComboBoxExample() {     super("SteppedComboBox Example");     String[] str = { "A", "abcdefghijklmnopqrstuvwxyz",         "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "0123456789" };     SteppedComboBox combo = new SteppedComboBox(str);     Dimension d = combo.getPreferredSize();     combo.setPreferredSize(new Dimension(50, d.height));     combo.setPopupWidth(d.width);     getContentPane().setLayout(new FlowLayout());     getContentPane().add(combo);   }   public static void main(String args[]) {     try {         UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");     } catch (Exception evt) {}        SteppedComboBoxExample f = new SteppedComboBoxExample();     f.addWindowListener(new WindowAdapter() {       public void windowClosing(WindowEvent e) {         System.exit(0);       }     });     f.setSize(300, 100);     f.show();   } } class SteppedComboBoxUI extends MetalComboBoxUI {   protected ComboPopup createPopup() {     BasicComboPopup popup = new BasicComboPopup(comboBox) {       public void show() {         Dimension popupSize = ((SteppedComboBox) comboBox)             .getPopupSize();         popupSize             .setSize(popupSize.width,                 getPopupHeightForRowCount(comboBox                     .getMaximumRowCount()));         Rectangle popupBounds = computePopupBounds(0, comboBox             .getBounds().height, popupSize.width, popupSize.height);         scroller.setMaximumSize(popupBounds.getSize());         scroller.setPreferredSize(popupBounds.getSize());         scroller.setMinimumSize(popupBounds.getSize());         list.invalidate();         int selectedIndex = comboBox.getSelectedIndex();         if (selectedIndex == -1) {           list.clearSelection();         } else {           list.setSelectedIndex(selectedIndex);         }         list.ensureIndexIsVisible(list.getSelectedIndex());         setLightWeightPopupEnabled(comboBox.isLightWeightPopupEnabled());         show(comboBox, popupBounds.x, popupBounds.y);       }     };     popup.getAccessibleContext().setAccessibleParent(comboBox);     return popup;   } } class SteppedComboBox extends JComboBox {   protected int popupWidth;   public SteppedComboBox(ComboBoxModel aModel) {     super(aModel);     setUI(new SteppedComboBoxUI());     popupWidth = 0;   }   public SteppedComboBox(final Object[] items) {     super(items);     setUI(new SteppedComboBoxUI());     popupWidth = 0;   }   public SteppedComboBox(Vector items) {     super(items);     setUI(new SteppedComboBoxUI());     popupWidth = 0;   }   public void setPopupWidth(int width) {     popupWidth = width;   }   public Dimension getPopupSize() {     Dimension size = getSize();     if (popupWidth < 1)       popupWidth = size.width;     return new Dimension(popupWidth, size.height);   } }