|
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. // ************************************************************* |