This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | Next revision Both sides next revision | ||
|
swing:jcheckbox [2020/03/30 07:29] |
swing:jcheckbox [2020/03/30 08:00] gthanos |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ===== Η κλάση JCheckBox ===== | ||
| + | |||
| + | Ένα //check box// έχει δύο δυνατές καταστάσεις //α)// επιλεγμένο και //β)// απο-επιλεγμένο. Κάθε //check box// υλοποιείται από την κλάση [[https:// | ||
| + | |||
| + | <code java CheckBoxDemo.java> | ||
| + | import java.awt.*; | ||
| + | import java.awt.event.*; | ||
| + | import javax.swing.*; | ||
| + | |||
| + | /* | ||
| + | * CheckBoxDemo.java requires 16 image files in the images/geek | ||
| + | * directory: | ||
| + | * geek-----.gif, | ||
| + | * geek-cg--.gif, | ||
| + | */ | ||
| + | public class CheckBoxDemo extends JPanel { | ||
| + | // | ||
| + | JCheckBox chinButton; | ||
| + | JCheckBox glassesButton; | ||
| + | JCheckBox hairButton; | ||
| + | JCheckBox teethButton; | ||
| + | |||
| + | StringBuffer choices; | ||
| + | JLabel pictureLabel; | ||
| + | |||
| + | public CheckBoxDemo() { | ||
| + | super(new BorderLayout()); | ||
| + | |||
| + | //Create the check boxes. | ||
| + | chinButton = new JCheckBox(" | ||
| + | chinButton.setMnemonic(KeyEvent.VK_C); | ||
| + | chinButton.setSelected(true); | ||
| + | |||
| + | glassesButton = new JCheckBox(" | ||
| + | glassesButton.setMnemonic(KeyEvent.VK_G); | ||
| + | glassesButton.setSelected(true); | ||
| + | |||
| + | hairButton = new JCheckBox(" | ||
| + | hairButton.setMnemonic(KeyEvent.VK_H); | ||
| + | hairButton.setSelected(true); | ||
| + | |||
| + | teethButton = new JCheckBox(" | ||
| + | teethButton.setMnemonic(KeyEvent.VK_T); | ||
| + | teethButton.setSelected(true); | ||
| + | |||
| + | //Register a listener for the check boxes. | ||
| + | chinButton.addItemListener(itemListener); | ||
| + | glassesButton.addItemListener(itemListener); | ||
| + | hairButton.addItemListener(itemListener); | ||
| + | teethButton.addItemListener(itemListener); | ||
| + | |||
| + | //Indicates what's on the geek. | ||
| + | choices = new StringBuffer(" | ||
| + | |||
| + | //Set up the picture label | ||
| + | pictureLabel = new JLabel(); | ||
| + | pictureLabel.setFont(pictureLabel.getFont().deriveFont(Font.ITALIC)); | ||
| + | updatePicture(); | ||
| + | |||
| + | //Put the check boxes in a column in a panel | ||
| + | JPanel checkBoxPanel = new JPanel(new GridLayout(0, | ||
| + | checkBoxPanel.add(chinButton); | ||
| + | checkBoxPanel.add(glassesButton); | ||
| + | checkBoxPanel.add(hairButton); | ||
| + | checkBoxPanel.add(teethButton); | ||
| + | |||
| + | add(checkBoxPanel, | ||
| + | add(pictureLabel, | ||
| + | setBorder(BorderFactory.createEmptyBorder(20, | ||
| + | } | ||
| + | | ||
| + | ItemListener itemListener = new ItemListener() { | ||
| + | |||
| + | /* Listens to the check boxes. */ | ||
| + | public void itemStateChanged(ItemEvent e) { | ||
| + | int index = 0; | ||
| + | char c = ' | ||
| + | Object source = e.getItemSelectable(); | ||
| + | |||
| + | if (source == chinButton) { | ||
| + | index = 0; | ||
| + | c = ' | ||
| + | } else if (source == glassesButton) { | ||
| + | index = 1; | ||
| + | c = ' | ||
| + | } else if (source == hairButton) { | ||
| + | index = 2; | ||
| + | c = ' | ||
| + | } else if (source == teethButton) { | ||
| + | index = 3; | ||
| + | c = ' | ||
| + | } | ||
| + | |||
| + | //Now that we know which button was pushed, find out | ||
| + | //whether it was selected or deselected. | ||
| + | if (e.getStateChange() == ItemEvent.DESELECTED) { | ||
| + | c = ' | ||
| + | } | ||
| + | |||
| + | //Apply the change to the string. | ||
| + | choices.setCharAt(index, | ||
| + | |||
| + | updatePicture(); | ||
| + | } | ||
| + | }; | ||
| + | |||
| + | protected void updatePicture() { | ||
| + | //Get the icon corresponding to the image. | ||
| + | ImageIcon icon = new ImageIcon( | ||
| + | " | ||
| + | + choices.toString() | ||
| + | + " | ||
| + | pictureLabel.setIcon(icon); | ||
| + | pictureLabel.setToolTipText(choices.toString()); | ||
| + | if (icon == null) { | ||
| + | pictureLabel.setText(" | ||
| + | } else { | ||
| + | pictureLabel.setText(null); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Create the GUI and show it. For thread safety, | ||
| + | * this method should be invoked from the | ||
| + | * event-dispatching thread. | ||
| + | */ | ||
| + | private static void createAndShowGUI() { | ||
| + | //Create and set up the window. | ||
| + | JFrame frame = new JFrame(" | ||
| + | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
| + | |||
| + | //Create and set up the content pane. | ||
| + | JComponent newContentPane = new CheckBoxDemo(); | ||
| + | newContentPane.setOpaque(true); | ||
| + | frame.setContentPane(newContentPane); | ||
| + | |||
| + | //Display the window. | ||
| + | frame.pack(); | ||
| + | frame.setVisible(true); | ||
| + | } | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | //Schedule a job for the event-dispatching thread: | ||
| + | //creating and showing this application' | ||
| + | javax.swing.SwingUtilities.invokeLater(new Runnable() { | ||
| + | public void run() { | ||
| + | createAndShowGUI(); | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Για να εκτελέσετε με επιτυχία το παραπάνω πρόγραμμα, | ||