1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import javax.swing.*;
import java.awt.*;
import java.awt.Color;
import java.awt.event.*;

public class ComboBoxExample_Answer_1 implements   ActionListener{

    JComboBox colorChooser;
    // **** ANSWER ****
    // Instead of having 4 distinct panels
    // We create an array of them!
    JPanel [] panels = new JPanel[4];

    public JPanel createContentPane (){

        JPanel totalGUI = new JPanel();

        // To create a JComboBox, we need to pass in an array of Strings.
        // This gives the ComboBox the list of selections you can make.

        String colors[] = {"Red", "Blue", "Green", "Yellow"};

        colorChooser = new JComboBox(colors);
        colorChooser.setSelectedIndex(1);
        colorChooser.addActionListener(this);

        // Now we create a simple JPanel that displays our four coloured boxes.

        JPanel boxPanel = new JPanel(new GridLayout(2, 2, 20, 20));

        panels[0] = createSquareJPanel(Color.red, 50);
        panels[1] = createSquareJPanel(Color.blue, 50);
        panels[2] = createSquareJPanel(Color.green, 50);
        panels[3] = createSquareJPanel(Color.yellow, 50);

        // **** ANSWER ****
        // This sets all the panels to hidden, and adds them all to
        // the boxPanel using a for loop.
        // Then we set the blue panel to be shown.

        for(int i = 0; i < panels.length; i++)
        {
            panels[i].setVisible(false);
            boxPanel.add(panels[i]);
        }
        panels[1].setVisible(true);

        // This sets the widgets on the screen to be layed out in a
        // top to bottom fashion with spacers inbetween.

        JPanel bottomPanel = new JPanel();
        bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.PAGE_AXIS));

        bottomPanel.add(Box.createRigidArea(new Dimension(0,10)));
        bottomPanel.add(colorChooser);
        bottomPanel.add(Box.createRigidArea(new Dimension(0,20)));
        bottomPanel.add(boxPanel);
        bottomPanel.add(Box.createRigidArea(new Dimension(0,10)));

        totalGUI.add(bottomPanel);

        totalGUI.setOpaque(true);
        return totalGUI;
    }

    // In this method, we create a square JPanel of a colour and set size
    // specified by the arguments.

    private JPanel createSquareJPanel(Color color, int size) {
        JPanel tempPanel = new JPanel();
        tempPanel.setBackground(color);
        tempPanel.setMinimumSize(new Dimension(size, size));
        tempPanel.setMaximumSize(new Dimension(size, size));
        tempPanel.setPreferredSize(new Dimension(size, size));
        return tempPanel;
    }

    // This actionPerformed simply takes sets the visibility of each
    // coloured box depending on what is selected on the combo box.

    public void actionPerformed(ActionEvent e) {

        int temp;

        if(e.getSource() == colorChooser)
        {
            temp = colorChooser.getSelectedIndex();

            // **** ANSWER ****
            // Set all the panels to false
            // then the panel chosen to true!
            for(int i = 0; i < panels.length; i++)
            {
                panels[i].setVisible(false);
            }
            panels[temp].setVisible(true);   
        }
    }

    private static void createAndShowGUI() {

        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("[=] JComboBox [=]");

        ComboBoxExample_Answer_1 demo = new ComboBoxExample_Answer_1();
        frame.setContentPane(demo.createContentPane());
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

// *************************************************************
// Name : ComboBoxExample_Answer_1.java
// Author : Stuart Davidson
// Date : 28/12/2006
// Description : Shows how an array can be used to store objects
// of the GUI to save time and space.
// *************************************************************