| /* ComboBoxDemo.java -- An example showing various combo boxes in Swing. |
| Copyright (C) 2005, 2006, Free Software Foundation, Inc. |
| |
| This file is part of GNU Classpath examples. |
| |
| GNU Classpath is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| GNU Classpath is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Classpath; see the file COPYING. If not, write to the |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
| 02110-1301 USA. |
| */ |
| |
| |
| package gnu.classpath.examples.swing; |
| |
| import java.awt.BorderLayout; |
| import java.awt.Color; |
| import java.awt.Component; |
| import java.awt.Dimension; |
| import java.awt.Font; |
| import java.awt.GridLayout; |
| import java.awt.event.ActionEvent; |
| import java.awt.event.ActionListener; |
| |
| import javax.swing.BorderFactory; |
| import javax.swing.DefaultListCellRenderer; |
| import javax.swing.Icon; |
| import javax.swing.JButton; |
| import javax.swing.JCheckBox; |
| import javax.swing.JComboBox; |
| import javax.swing.JComponent; |
| import javax.swing.JFrame; |
| import javax.swing.JList; |
| import javax.swing.JPanel; |
| import javax.swing.SwingUtilities; |
| import javax.swing.plaf.metal.MetalIconFactory; |
| |
| /** |
| * A simple demo showing various combo boxes in different states. |
| */ |
| public class ComboBoxDemo |
| extends JPanel |
| implements ActionListener |
| { |
| |
| class CustomCellRenderer extends DefaultListCellRenderer |
| { |
| public Component getListCellRendererComponent(JList list, |
| Object value, |
| int index, |
| boolean isSelected, |
| boolean cellHasFocus) |
| { |
| DefaultListCellRenderer result = (DefaultListCellRenderer) |
| super.getListCellRendererComponent(list, value, index, isSelected, |
| cellHasFocus); |
| Icon icon = (Icon) value; |
| result.setIcon(icon); |
| result.setText("Index = " + index); |
| return result; |
| } |
| } |
| |
| private JCheckBox comboState1; |
| private JComboBox combo1; |
| private JComboBox combo2; |
| |
| private JCheckBox comboState2; |
| private JComboBox combo3; |
| private JComboBox combo4; |
| |
| private JCheckBox comboState3; |
| private JComboBox combo5; |
| private JComboBox combo6; |
| |
| private JCheckBox comboState4; |
| private JComboBox combo7; |
| private JComboBox combo8; |
| |
| private JCheckBox comboState5; |
| private JComboBox combo9; |
| private JComboBox combo10; |
| |
| private JCheckBox comboState6; |
| private JComboBox combo11; |
| private JComboBox combo12; |
| |
| /** |
| * Creates a new demo instance. |
| */ |
| public ComboBoxDemo() |
| { |
| super(); |
| createContent(); |
| } |
| |
| /** |
| * When the demo is run independently, the frame is displayed, so we should |
| * initialise the content panel (including the demo content and a close |
| * button). But when the demo is run as part of the Swing activity board, |
| * only the demo content panel is used, the frame itself is never displayed, |
| * so we can avoid this step. |
| */ |
| void initFrameContent() |
| { |
| JPanel closePanel = new JPanel(); |
| JButton closeButton = new JButton("Close"); |
| closeButton.setActionCommand("CLOSE"); |
| closeButton.addActionListener(this); |
| closePanel.add(closeButton); |
| add(closePanel, BorderLayout.SOUTH); |
| } |
| |
| /** |
| * Returns a panel with the demo content. The panel |
| * uses a BorderLayout(), and the BorderLayout.SOUTH area |
| * is empty, to allow callers to add controls to the |
| * bottom of the panel if they want to (a close button is |
| * added if this demo is being run as a standalone demo). |
| */ |
| private void createContent() |
| { |
| setLayout(new BorderLayout()); |
| JPanel panel = new JPanel(new GridLayout(6, 1)); |
| panel.add(createPanel1()); |
| panel.add(createPanel2()); |
| panel.add(createPanel3()); |
| panel.add(createPanel4()); |
| panel.add(createPanel5()); |
| panel.add(createPanel6()); |
| add(panel); |
| } |
| |
| private JPanel createPanel1() |
| { |
| JPanel panel = new JPanel(new BorderLayout()); |
| this.comboState1 = new JCheckBox("Enabled", true); |
| this.comboState1.setActionCommand("COMBO_STATE1"); |
| this.comboState1.addActionListener(this); |
| panel.add(this.comboState1, BorderLayout.EAST); |
| |
| JPanel controlPanel = new JPanel(); |
| controlPanel.setBorder(BorderFactory.createTitledBorder("Regular: ")); |
| this.combo1 = new JComboBox(new Object[] {"Australia", "New Zealand", |
| "England"}); |
| |
| this.combo2 = new JComboBox(new Object[] {"Australia", "New Zealand", |
| "England"}); |
| this.combo2.setEditable(true); |
| |
| controlPanel.add(combo1); |
| controlPanel.add(combo2); |
| |
| panel.add(controlPanel); |
| |
| return panel; |
| } |
| |
| private JPanel createPanel2() |
| { |
| JPanel panel = new JPanel(new BorderLayout()); |
| this.comboState2 = new JCheckBox("Enabled", true); |
| this.comboState2.setActionCommand("COMBO_STATE2"); |
| this.comboState2.addActionListener(this); |
| panel.add(this.comboState2, BorderLayout.EAST); |
| |
| JPanel controlPanel = new JPanel(); |
| controlPanel.setBorder(BorderFactory.createTitledBorder("Large Font: ")); |
| this.combo3 = new JComboBox(new Object[] {"Australia", "New Zealand", |
| "England"}); |
| this.combo3.setFont(new Font("Dialog", Font.PLAIN, 20)); |
| |
| this.combo4 = new JComboBox(new Object[] {"Australia", "New Zealand", |
| "England"}); |
| this.combo4.setEditable(true); |
| this.combo4.setFont(new Font("Dialog", Font.PLAIN, 20)); |
| |
| controlPanel.add(combo3); |
| controlPanel.add(combo4); |
| |
| panel.add(controlPanel); |
| |
| return panel; |
| } |
| |
| private JPanel createPanel3() |
| { |
| JPanel panel = new JPanel(new BorderLayout()); |
| this.comboState3 = new JCheckBox("Enabled", true); |
| this.comboState3.setActionCommand("COMBO_STATE3"); |
| this.comboState3.addActionListener(this); |
| panel.add(this.comboState3, BorderLayout.EAST); |
| |
| JPanel controlPanel = new JPanel(); |
| controlPanel.setBorder(BorderFactory.createTitledBorder("Colored Background: ")); |
| this.combo5 = new JComboBox(new Object[] {"Australia", "New Zealand", |
| "England"}); |
| this.combo5.setBackground(Color.yellow); |
| |
| this.combo6 = new JComboBox(new Object[] {"Australia", "New Zealand", |
| "England"}); |
| this.combo6.setEditable(true); |
| this.combo6.setBackground(Color.yellow); |
| |
| controlPanel.add(combo5); |
| controlPanel.add(combo6); |
| |
| panel.add(controlPanel); |
| |
| return panel; |
| } |
| |
| /** |
| * This panel contains combo boxes that are empty. |
| * |
| * @return A panel. |
| */ |
| private JPanel createPanel4() |
| { |
| JPanel panel = new JPanel(new BorderLayout()); |
| this.comboState4 = new JCheckBox("Enabled", true); |
| this.comboState4.setActionCommand("COMBO_STATE4"); |
| this.comboState4.addActionListener(this); |
| panel.add(this.comboState4, BorderLayout.EAST); |
| |
| JPanel controlPanel = new JPanel(); |
| controlPanel.setBorder(BorderFactory.createTitledBorder("Empty: ")); |
| this.combo7 = new JComboBox(); |
| this.combo8 = new JComboBox(); |
| this.combo8.setEditable(true); |
| |
| controlPanel.add(combo7); |
| controlPanel.add(combo8); |
| |
| panel.add(controlPanel); |
| |
| return panel; |
| } |
| |
| /** |
| * This panel contains combo boxes that are narrow but contain long text |
| * items. |
| * |
| * @return A panel. |
| */ |
| private JPanel createPanel5() |
| { |
| JPanel panel = new JPanel(new BorderLayout()); |
| this.comboState5 = new JCheckBox("Enabled", true); |
| this.comboState5.setActionCommand("COMBO_STATE5"); |
| this.comboState5.addActionListener(this); |
| panel.add(this.comboState5, BorderLayout.EAST); |
| |
| JPanel controlPanel = new JPanel(); |
| controlPanel.setBorder(BorderFactory.createTitledBorder("Narrow: ")); |
| this.combo9 = new JComboBox(new Object[] { |
| "A really long item that will be truncated when displayed"}); |
| this.combo9.setPreferredSize(new Dimension(100, 30)); |
| this.combo10 = new JComboBox(new Object[] { |
| "A really long item that will be truncated when displayed"}); |
| this.combo10.setPreferredSize(new Dimension(100, 30)); |
| this.combo10.setEditable(true); |
| |
| controlPanel.add(combo9); |
| controlPanel.add(combo10); |
| |
| panel.add(controlPanel); |
| |
| return panel; |
| } |
| |
| /** |
| * This panel contains combo boxes with a custom renderer. |
| * |
| * @return A panel. |
| */ |
| private JPanel createPanel6() |
| { |
| JPanel panel = new JPanel(new BorderLayout()); |
| this.comboState6 = new JCheckBox("Enabled", true); |
| this.comboState6.setActionCommand("COMBO_STATE6"); |
| this.comboState6.addActionListener(this); |
| panel.add(this.comboState6, BorderLayout.EAST); |
| |
| JPanel controlPanel = new JPanel(); |
| controlPanel.setBorder(BorderFactory.createTitledBorder("Custom Renderer: ")); |
| this.combo11 = new JComboBox(new Object[] { |
| MetalIconFactory.getFileChooserHomeFolderIcon(), |
| MetalIconFactory.getFileChooserNewFolderIcon()}); |
| this.combo11.setPreferredSize(new Dimension(100, 30)); |
| this.combo11.setRenderer(new CustomCellRenderer()); |
| this.combo12 = new JComboBox(new Object[] { |
| MetalIconFactory.getFileChooserHomeFolderIcon(), |
| MetalIconFactory.getFileChooserNewFolderIcon()}); |
| this.combo12.setPreferredSize(new Dimension(100, 30)); |
| this.combo12.setRenderer(new CustomCellRenderer()); |
| this.combo12.setEditable(true); |
| |
| controlPanel.add(combo11); |
| controlPanel.add(combo12); |
| |
| panel.add(controlPanel); |
| |
| return panel; |
| } |
| |
| public void actionPerformed(ActionEvent e) |
| { |
| if (e.getActionCommand().equals("COMBO_STATE1")) |
| { |
| combo1.setEnabled(comboState1.isSelected()); |
| combo2.setEnabled(comboState1.isSelected()); |
| } |
| else if (e.getActionCommand().equals("COMBO_STATE2")) |
| { |
| combo3.setEnabled(comboState2.isSelected()); |
| combo4.setEnabled(comboState2.isSelected()); |
| } |
| else if (e.getActionCommand().equals("COMBO_STATE3")) |
| { |
| combo5.setEnabled(comboState3.isSelected()); |
| combo6.setEnabled(comboState3.isSelected()); |
| } |
| else if (e.getActionCommand().equals("COMBO_STATE4")) |
| { |
| combo7.setEnabled(comboState4.isSelected()); |
| combo8.setEnabled(comboState4.isSelected()); |
| } |
| else if (e.getActionCommand().equals("COMBO_STATE5")) |
| { |
| combo9.setEnabled(comboState5.isSelected()); |
| combo10.setEnabled(comboState5.isSelected()); |
| } |
| else if (e.getActionCommand().equals("COMBO_STATE6")) |
| { |
| combo11.setEnabled(comboState6.isSelected()); |
| combo12.setEnabled(comboState6.isSelected()); |
| } |
| else if (e.getActionCommand().equals("CLOSE")) |
| { |
| System.exit(0); |
| } |
| } |
| |
| public static void main(String[] args) |
| { |
| SwingUtilities.invokeLater |
| (new Runnable() |
| { |
| public void run() |
| { |
| ComboBoxDemo app = new ComboBoxDemo(); |
| app.initFrameContent(); |
| JFrame frame = new JFrame(); |
| frame.getContentPane().add(app); |
| frame.pack(); |
| frame.setVisible(true); |
| } |
| }); |
| } |
| |
| /** |
| * Returns a DemoFactory that creates a ComboBoxDemo. |
| * |
| * @return a DemoFactory that creates a ComboBoxDemo |
| */ |
| public static DemoFactory createDemoFactory() |
| { |
| return new DemoFactory() |
| { |
| public JComponent createDemo() |
| { |
| return new ComboBoxDemo(); |
| } |
| }; |
| } |
| } |