jdk/test/sanity/client/lib/SwingSet3/src/com/sun/swingset3/demos/combobox/ComboBoxDemo.java
changeset 36744 a00905527ec2
child 37574 906cb708a629
equal deleted inserted replaced
36743:bdc3f1b79fb7 36744:a00905527ec2
       
     1 /*
       
     2  * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.
       
     8  *
       
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12  * version 2 for more details (a copy is included in the LICENSE file that
       
    13  * accompanied this code).
       
    14  *
       
    15  * You should have received a copy of the GNU General Public License version
       
    16  * 2 along with this work; if not, write to the Free Software Foundation,
       
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18  *
       
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20  * or visit www.oracle.com if you need additional information or have any
       
    21  * questions.
       
    22  */
       
    23 package com.sun.swingset3.demos.combobox;
       
    24 
       
    25 import java.awt.*;
       
    26 import java.awt.event.ActionEvent;
       
    27 import java.awt.event.ActionListener;
       
    28 import java.util.HashMap;
       
    29 import java.util.Map;
       
    30 import javax.accessibility.AccessibleRelation;
       
    31 import javax.swing.*;
       
    32 import javax.swing.border.BevelBorder;
       
    33 
       
    34 import com.sun.swingset3.demos.ResourceManager;
       
    35 import com.sun.swingset3.DemoProperties;
       
    36 
       
    37 /**
       
    38  * JComboBox Demo
       
    39  *
       
    40  * @author Jeff Dinkins
       
    41  * @version 1.13 11/17/05
       
    42  */
       
    43 @DemoProperties(
       
    44         value = "JComboBox Demo",
       
    45         category = "Controls",
       
    46         description = "Demonstrates JComboBox, a control which allows the user to make a selection from a popup list",
       
    47         sourceFiles = {
       
    48             "com/sun/swingset3/demos/combobox/ComboBoxDemo.java",
       
    49             "com/sun/swingset3/demos/ResourceManager.java",
       
    50             "com/sun/swingset3/demos/combobox/resources/ComboBoxDemo.properties",
       
    51             "com/sun/swingset3/demos/combobox/resources/images/brenteyes.jpg",
       
    52             "com/sun/swingset3/demos/combobox/resources/images/brenthair.jpg",
       
    53             "com/sun/swingset3/demos/combobox/resources/images/brentmouth.jpg",
       
    54             "com/sun/swingset3/demos/combobox/resources/images/ComboBoxDemo.gif",
       
    55             "com/sun/swingset3/demos/combobox/resources/images/georgeseyes.jpg",
       
    56             "com/sun/swingset3/demos/combobox/resources/images/georgeshair.jpg",
       
    57             "com/sun/swingset3/demos/combobox/resources/images/georgesmouth.jpg",
       
    58             "com/sun/swingset3/demos/combobox/resources/images/hanseyes.jpg",
       
    59             "com/sun/swingset3/demos/combobox/resources/images/hanshair.jpg",
       
    60             "com/sun/swingset3/demos/combobox/resources/images/hansmouth.jpg",
       
    61             "com/sun/swingset3/demos/combobox/resources/images/howardeyes.jpg",
       
    62             "com/sun/swingset3/demos/combobox/resources/images/howardhair.jpg",
       
    63             "com/sun/swingset3/demos/combobox/resources/images/howardmouth.jpg",
       
    64             "com/sun/swingset3/demos/combobox/resources/images/jameseyes.jpg",
       
    65             "com/sun/swingset3/demos/combobox/resources/images/jameshair.jpg",
       
    66             "com/sun/swingset3/demos/combobox/resources/images/jamesmouth.jpg",
       
    67             "com/sun/swingset3/demos/combobox/resources/images/jeffeyes.jpg",
       
    68             "com/sun/swingset3/demos/combobox/resources/images/jeffhair.jpg",
       
    69             "com/sun/swingset3/demos/combobox/resources/images/jeffmouth.jpg",
       
    70             "com/sun/swingset3/demos/combobox/resources/images/joneyes.jpg",
       
    71             "com/sun/swingset3/demos/combobox/resources/images/jonhair.jpg",
       
    72             "com/sun/swingset3/demos/combobox/resources/images/jonmouth.jpg",
       
    73             "com/sun/swingset3/demos/combobox/resources/images/laraeyes.jpg",
       
    74             "com/sun/swingset3/demos/combobox/resources/images/larahair.jpg",
       
    75             "com/sun/swingset3/demos/combobox/resources/images/laramouth.jpg",
       
    76             "com/sun/swingset3/demos/combobox/resources/images/larryeyes.jpg",
       
    77             "com/sun/swingset3/demos/combobox/resources/images/larryhair.jpg",
       
    78             "com/sun/swingset3/demos/combobox/resources/images/larrymouth.jpg",
       
    79             "com/sun/swingset3/demos/combobox/resources/images/lisaeyes.jpg",
       
    80             "com/sun/swingset3/demos/combobox/resources/images/lisahair.jpg",
       
    81             "com/sun/swingset3/demos/combobox/resources/images/lisamouth.jpg",
       
    82             "com/sun/swingset3/demos/combobox/resources/images/michaeleyes.jpg",
       
    83             "com/sun/swingset3/demos/combobox/resources/images/michaelhair.jpg",
       
    84             "com/sun/swingset3/demos/combobox/resources/images/michaelmouth.jpg",
       
    85             "com/sun/swingset3/demos/combobox/resources/images/philipeyes.jpg",
       
    86             "com/sun/swingset3/demos/combobox/resources/images/philiphair.jpg",
       
    87             "com/sun/swingset3/demos/combobox/resources/images/philipmouth.jpg",
       
    88             "com/sun/swingset3/demos/combobox/resources/images/scotteyes.jpg",
       
    89             "com/sun/swingset3/demos/combobox/resources/images/scotthair.jpg",
       
    90             "com/sun/swingset3/demos/combobox/resources/images/scottmouth.jpg"
       
    91         }
       
    92 )
       
    93 public class ComboBoxDemo extends JPanel implements ActionListener {
       
    94 
       
    95     private static final Dimension VGAP15 = new Dimension(1, 15);
       
    96     private static final Dimension HGAP20 = new Dimension(20, 1);
       
    97     private static final Dimension VGAP20 = new Dimension(1, 20);
       
    98     private static final Dimension HGAP30 = new Dimension(30, 1);
       
    99     private static final Dimension VGAP30 = new Dimension(1, 30);
       
   100 
       
   101     private final ResourceManager resourceManager = new ResourceManager(this.getClass());
       
   102     public static final String DEMO_TITLE = ComboBoxDemo.class.getAnnotation(DemoProperties.class).value();
       
   103 
       
   104     private Face face;
       
   105     private JLabel faceLabel;
       
   106 
       
   107     private JComboBox<String> hairCB;
       
   108     private JComboBox<String> eyesCB;
       
   109     private JComboBox<String> mouthCB;
       
   110 
       
   111     private JComboBox<String> presetCB;
       
   112 
       
   113     private final Map<String, Object> parts = new HashMap<>();
       
   114 
       
   115     /**
       
   116      * main method allows us to run as a standalone demo.
       
   117      *
       
   118      * @param args
       
   119      */
       
   120     public static void main(String[] args) {
       
   121         JFrame frame = new JFrame(DEMO_TITLE);
       
   122 
       
   123         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
   124         frame.getContentPane().add(new ComboBoxDemo());
       
   125         frame.setPreferredSize(new Dimension(800, 600));
       
   126         frame.pack();
       
   127         frame.setLocationRelativeTo(null);
       
   128         frame.setVisible(true);
       
   129     }
       
   130 
       
   131     /**
       
   132      * ComboBoxDemo Constructor
       
   133      */
       
   134     public ComboBoxDemo() {
       
   135         createComboBoxDemo();
       
   136     }
       
   137 
       
   138     private void createComboBoxDemo() {
       
   139         setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
       
   140 
       
   141         JPanel innerPanel = new JPanel();
       
   142         innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.X_AXIS));
       
   143 
       
   144         add(Box.createRigidArea(VGAP20));
       
   145         add(innerPanel);
       
   146         add(Box.createRigidArea(VGAP20));
       
   147 
       
   148         innerPanel.add(Box.createRigidArea(HGAP20));
       
   149 
       
   150         // Create a panel to hold buttons
       
   151         JPanel comboBoxPanel = new JPanel() {
       
   152             @Override
       
   153             public Dimension getMaximumSize() {
       
   154                 return new Dimension(getPreferredSize().width, super.getMaximumSize().height);
       
   155             }
       
   156         };
       
   157         comboBoxPanel.setLayout(new BoxLayout(comboBoxPanel, BoxLayout.Y_AXIS));
       
   158 
       
   159         comboBoxPanel.add(Box.createRigidArea(VGAP15));
       
   160 
       
   161         JLabel l = (JLabel) comboBoxPanel.add(new JLabel(resourceManager.getString("ComboBoxDemo.presets")));
       
   162         l.setAlignmentX(JLabel.LEFT_ALIGNMENT);
       
   163         comboBoxPanel.add(presetCB = createPresetComboBox());
       
   164         presetCB.setAlignmentX(JComboBox.LEFT_ALIGNMENT);
       
   165         l.setLabelFor(presetCB);
       
   166         comboBoxPanel.add(Box.createRigidArea(VGAP30));
       
   167 
       
   168         l = (JLabel) comboBoxPanel.add(new JLabel(resourceManager.getString("ComboBoxDemo.hair_description")));
       
   169         l.setAlignmentX(JLabel.LEFT_ALIGNMENT);
       
   170         comboBoxPanel.add(hairCB = createHairComboBox());
       
   171         hairCB.setAlignmentX(JComboBox.LEFT_ALIGNMENT);
       
   172         l.setLabelFor(hairCB);
       
   173         comboBoxPanel.add(Box.createRigidArea(VGAP15));
       
   174 
       
   175         l = (JLabel) comboBoxPanel.add(new JLabel(resourceManager.getString("ComboBoxDemo.eyes_description")));
       
   176         l.setAlignmentX(JLabel.LEFT_ALIGNMENT);
       
   177         comboBoxPanel.add(eyesCB = createEyesComboBox());
       
   178         eyesCB.setAlignmentX(JComboBox.LEFT_ALIGNMENT);
       
   179         l.setLabelFor(eyesCB);
       
   180         comboBoxPanel.add(Box.createRigidArea(VGAP15));
       
   181 
       
   182         l = (JLabel) comboBoxPanel.add(new JLabel(resourceManager.getString("ComboBoxDemo.mouth_description")));
       
   183         l.setAlignmentX(JLabel.LEFT_ALIGNMENT);
       
   184         comboBoxPanel.add(mouthCB = createMouthComboBox());
       
   185 
       
   186         mouthCB.setAlignmentX(JComboBox.LEFT_ALIGNMENT);
       
   187         l.setLabelFor(mouthCB);
       
   188         comboBoxPanel.add(Box.createRigidArea(VGAP15));
       
   189 
       
   190         // Fill up the remaining space
       
   191         comboBoxPanel.add(new JPanel(new BorderLayout()));
       
   192 
       
   193         // Create and place the Face.
       
   194         face = new Face();
       
   195         JPanel facePanel = new JPanel();
       
   196         facePanel.setLayout(new BorderLayout());
       
   197         facePanel.setBorder(new BevelBorder(BevelBorder.LOWERED));
       
   198 
       
   199         faceLabel = new JLabel(face);
       
   200         facePanel.add(faceLabel, BorderLayout.CENTER);
       
   201         // Indicate that the face panel is controlled by the hair, eyes and
       
   202         // mouth combo boxes.
       
   203         Object[] controlledByObjects = new Object[3];
       
   204         controlledByObjects[0] = hairCB;
       
   205         controlledByObjects[1] = eyesCB;
       
   206         controlledByObjects[2] = mouthCB;
       
   207         AccessibleRelation controlledByRelation
       
   208                 = new AccessibleRelation(AccessibleRelation.CONTROLLED_BY_PROPERTY,
       
   209                         controlledByObjects);
       
   210         facePanel.getAccessibleContext().getAccessibleRelationSet().add(controlledByRelation);
       
   211 
       
   212         // Indicate that the hair, eyes and mouth combo boxes are controllers
       
   213         // for the face panel.
       
   214         AccessibleRelation controllerForRelation
       
   215                 = new AccessibleRelation(AccessibleRelation.CONTROLLER_FOR_PROPERTY,
       
   216                         facePanel);
       
   217         hairCB.getAccessibleContext().getAccessibleRelationSet().add(controllerForRelation);
       
   218         eyesCB.getAccessibleContext().getAccessibleRelationSet().add(controllerForRelation);
       
   219         mouthCB.getAccessibleContext().getAccessibleRelationSet().add(controllerForRelation);
       
   220 
       
   221         // add buttons and image panels to inner panel
       
   222         innerPanel.add(comboBoxPanel);
       
   223         innerPanel.add(Box.createRigidArea(HGAP30));
       
   224         innerPanel.add(facePanel);
       
   225         innerPanel.add(Box.createRigidArea(HGAP20));
       
   226 
       
   227         // load up the face parts
       
   228         addFace("brent", resourceManager.getString("ComboBoxDemo.brent"));
       
   229         addFace("georges", resourceManager.getString("ComboBoxDemo.georges"));
       
   230         addFace("hans", resourceManager.getString("ComboBoxDemo.hans"));
       
   231         addFace("howard", resourceManager.getString("ComboBoxDemo.howard"));
       
   232         addFace("james", resourceManager.getString("ComboBoxDemo.james"));
       
   233         addFace("jeff", resourceManager.getString("ComboBoxDemo.jeff"));
       
   234         addFace("jon", resourceManager.getString("ComboBoxDemo.jon"));
       
   235         addFace("lara", resourceManager.getString("ComboBoxDemo.lara"));
       
   236         addFace("larry", resourceManager.getString("ComboBoxDemo.larry"));
       
   237         addFace("lisa", resourceManager.getString("ComboBoxDemo.lisa"));
       
   238         addFace("michael", resourceManager.getString("ComboBoxDemo.michael"));
       
   239         addFace("philip", resourceManager.getString("ComboBoxDemo.philip"));
       
   240         addFace("scott", resourceManager.getString("ComboBoxDemo.scott"));
       
   241 
       
   242         // set the default face
       
   243         presetCB.setSelectedIndex(0);
       
   244     }
       
   245 
       
   246     private void addFace(String name, String i18n_name) {
       
   247         ImageIcon i;
       
   248         String i18n_hair = resourceManager.getString("ComboBoxDemo.hair");
       
   249         String i18n_eyes = resourceManager.getString("ComboBoxDemo.eyes");
       
   250         String i18n_mouth = resourceManager.getString("ComboBoxDemo.mouth");
       
   251 
       
   252         parts.put(i18n_name, name); // i18n name lookup
       
   253         parts.put(name, i18n_name); // reverse name lookup
       
   254 
       
   255         i = resourceManager.createImageIcon(name + "hair.jpg", i18n_name + i18n_hair);
       
   256         parts.put(name + "hair", i);
       
   257 
       
   258         i = resourceManager.createImageIcon(name + "eyes.jpg", i18n_name + i18n_eyes);
       
   259         parts.put(name + "eyes", i);
       
   260 
       
   261         i = resourceManager.createImageIcon(name + "mouth.jpg", i18n_name + i18n_mouth);
       
   262         parts.put(name + "mouth", i);
       
   263     }
       
   264 
       
   265     private JComboBox<String> createHairComboBox() {
       
   266         JComboBox<String> cb = new JComboBox<>();
       
   267         fillComboBox(cb);
       
   268         cb.addActionListener(this);
       
   269         return cb;
       
   270     }
       
   271 
       
   272     private JComboBox<String> createEyesComboBox() {
       
   273         JComboBox<String> cb = new JComboBox<>();
       
   274         fillComboBox(cb);
       
   275         cb.addActionListener(this);
       
   276         return cb;
       
   277     }
       
   278 
       
   279     private JComboBox<String> createMouthComboBox() {
       
   280         JComboBox<String> cb = new JComboBox<>();
       
   281         fillComboBox(cb);
       
   282         cb.addActionListener(this);
       
   283         return cb;
       
   284     }
       
   285 
       
   286     private JComboBox<String> createPresetComboBox() {
       
   287         JComboBox<String> cb = new JComboBox<>();
       
   288         cb.addItem(resourceManager.getString("ComboBoxDemo.preset1"));
       
   289         cb.addItem(resourceManager.getString("ComboBoxDemo.preset2"));
       
   290         cb.addItem(resourceManager.getString("ComboBoxDemo.preset3"));
       
   291         cb.addItem(resourceManager.getString("ComboBoxDemo.preset4"));
       
   292         cb.addItem(resourceManager.getString("ComboBoxDemo.preset5"));
       
   293         cb.addItem(resourceManager.getString("ComboBoxDemo.preset6"));
       
   294         cb.addItem(resourceManager.getString("ComboBoxDemo.preset7"));
       
   295         cb.addItem(resourceManager.getString("ComboBoxDemo.preset8"));
       
   296         cb.addItem(resourceManager.getString("ComboBoxDemo.preset9"));
       
   297         cb.addItem(resourceManager.getString("ComboBoxDemo.preset10"));
       
   298         cb.addActionListener(this);
       
   299         return cb;
       
   300     }
       
   301 
       
   302     private void fillComboBox(JComboBox<String> cb) {
       
   303         cb.addItem(resourceManager.getString("ComboBoxDemo.brent"));
       
   304         cb.addItem(resourceManager.getString("ComboBoxDemo.georges"));
       
   305         cb.addItem(resourceManager.getString("ComboBoxDemo.hans"));
       
   306         cb.addItem(resourceManager.getString("ComboBoxDemo.howard"));
       
   307         cb.addItem(resourceManager.getString("ComboBoxDemo.james"));
       
   308         cb.addItem(resourceManager.getString("ComboBoxDemo.jeff"));
       
   309         cb.addItem(resourceManager.getString("ComboBoxDemo.jon"));
       
   310         cb.addItem(resourceManager.getString("ComboBoxDemo.lara"));
       
   311         cb.addItem(resourceManager.getString("ComboBoxDemo.larry"));
       
   312         cb.addItem(resourceManager.getString("ComboBoxDemo.lisa"));
       
   313         cb.addItem(resourceManager.getString("ComboBoxDemo.michael"));
       
   314         cb.addItem(resourceManager.getString("ComboBoxDemo.philip"));
       
   315         cb.addItem(resourceManager.getString("ComboBoxDemo.scott"));
       
   316     }
       
   317 
       
   318     @Override
       
   319     public void actionPerformed(ActionEvent e) {
       
   320         if (e.getSource() == hairCB) {
       
   321             String name = (String) parts.get(hairCB.getSelectedItem());
       
   322             face.setHair((ImageIcon) parts.get(name + "hair"));
       
   323             faceLabel.repaint();
       
   324         } else if (e.getSource() == eyesCB) {
       
   325             String name = (String) parts.get(eyesCB.getSelectedItem());
       
   326             face.setEyes((ImageIcon) parts.get(name + "eyes"));
       
   327             faceLabel.repaint();
       
   328         } else if (e.getSource() == mouthCB) {
       
   329             String name = (String) parts.get(mouthCB.getSelectedItem());
       
   330             face.setMouth((ImageIcon) parts.get(name + "mouth"));
       
   331             faceLabel.repaint();
       
   332         } else if (e.getSource() == presetCB) {
       
   333             String hair = null;
       
   334             String eyes = null;
       
   335             String mouth = null;
       
   336             switch (presetCB.getSelectedIndex()) {
       
   337                 case 0:
       
   338                     hair = (String) parts.get("philip");
       
   339                     eyes = (String) parts.get("howard");
       
   340                     mouth = (String) parts.get("jeff");
       
   341                     break;
       
   342                 case 1:
       
   343                     hair = (String) parts.get("jeff");
       
   344                     eyes = (String) parts.get("larry");
       
   345                     mouth = (String) parts.get("philip");
       
   346                     break;
       
   347                 case 2:
       
   348                     hair = (String) parts.get("howard");
       
   349                     eyes = (String) parts.get("scott");
       
   350                     mouth = (String) parts.get("hans");
       
   351                     break;
       
   352                 case 3:
       
   353                     hair = (String) parts.get("philip");
       
   354                     eyes = (String) parts.get("jeff");
       
   355                     mouth = (String) parts.get("hans");
       
   356                     break;
       
   357                 case 4:
       
   358                     hair = (String) parts.get("brent");
       
   359                     eyes = (String) parts.get("jon");
       
   360                     mouth = (String) parts.get("scott");
       
   361                     break;
       
   362                 case 5:
       
   363                     hair = (String) parts.get("lara");
       
   364                     eyes = (String) parts.get("larry");
       
   365                     mouth = (String) parts.get("lisa");
       
   366                     break;
       
   367                 case 6:
       
   368                     hair = (String) parts.get("james");
       
   369                     eyes = (String) parts.get("philip");
       
   370                     mouth = (String) parts.get("michael");
       
   371                     break;
       
   372                 case 7:
       
   373                     hair = (String) parts.get("philip");
       
   374                     eyes = (String) parts.get("lisa");
       
   375                     mouth = (String) parts.get("brent");
       
   376                     break;
       
   377                 case 8:
       
   378                     hair = (String) parts.get("james");
       
   379                     eyes = (String) parts.get("philip");
       
   380                     mouth = (String) parts.get("jon");
       
   381                     break;
       
   382                 case 9:
       
   383                     hair = (String) parts.get("lara");
       
   384                     eyes = (String) parts.get("jon");
       
   385                     mouth = (String) parts.get("scott");
       
   386                     break;
       
   387             }
       
   388             if (hair != null) {
       
   389                 hairCB.setSelectedItem(hair);
       
   390                 eyesCB.setSelectedItem(eyes);
       
   391                 mouthCB.setSelectedItem(mouth);
       
   392                 faceLabel.repaint();
       
   393             }
       
   394         }
       
   395     }
       
   396 
       
   397     private static class Face implements Icon {
       
   398 
       
   399         private ImageIcon hair;
       
   400         private ImageIcon eyes;
       
   401         private ImageIcon mouth;
       
   402 
       
   403         void setHair(ImageIcon i) {
       
   404             hair = i;
       
   405         }
       
   406 
       
   407         void setEyes(ImageIcon i) {
       
   408             eyes = i;
       
   409         }
       
   410 
       
   411         void setMouth(ImageIcon i) {
       
   412             mouth = i;
       
   413         }
       
   414 
       
   415         @Override
       
   416         public void paintIcon(Component c, Graphics g, int x, int y) {
       
   417             int height = y;
       
   418             x = c.getWidth() / 2 - getIconWidth() / 2;
       
   419 
       
   420             if (hair != null) {
       
   421                 hair.paintIcon(c, g, x, height);
       
   422                 height += hair.getIconHeight();
       
   423             }
       
   424 
       
   425             if (eyes != null) {
       
   426                 eyes.paintIcon(c, g, x, height);
       
   427                 height += eyes.getIconHeight();
       
   428             }
       
   429 
       
   430             if (mouth != null) {
       
   431                 mouth.paintIcon(c, g, x, height);
       
   432             }
       
   433         }
       
   434 
       
   435         @Override
       
   436         public int getIconWidth() {
       
   437             return 344;
       
   438         }
       
   439 
       
   440         @Override
       
   441         public int getIconHeight() {
       
   442             return 455;
       
   443         }
       
   444     }
       
   445 }