This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
swing:buttons [2015/05/11 05:40] gthanos [Η κλάση JCheckBoxButton] |
swing:buttons [2016/02/26 11:15] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Buttons, Check Boxes & Radio Buttons ====== | ====== Buttons, Check Boxes & Radio Buttons ====== | ||
- | Για την δημιουργία ενός button μπορείτε να χρησιμοποιήσετε μία κλάση από τις απογόνους της κλάσης [[https://docs.oracle.com/javase/7/docs/api/javax/swing/AbstractButton.html|javax.swing.AbstractButton]], όπως οι [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JButton.html|JButton]], [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JCheckBox.html|JCheckBox]] | + | Για την δημιουργία ενός button μπορείτε να χρησιμοποιήσετε μία κλάση από τις απογόνους της κλάσης [[https://docs.oracle.com/javase/7/docs/api/javax/swing/AbstractButton.html|javax.swing.AbstractButton]], όπως οι [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JButton.html|JButton]], [[https://docs.oracle.com/javase/7/docs/api/javax/swing/JCheckBox.html|JCheckBox]] |
- | ή [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JRadioButton.html|JRadioButton]]. Άλλες υποκλάσεις της κλάσης //AbstractButton// είναι οι [[https://docs.oracle.com/javase/7/docs/api/javax/swing/JMenuItem.html|JMenuItem]], [[https://docs.oracle.com/javase/7/docs/api/javax/swing/JCheckBoxMenuItem.html|JCheckBoxMenuItem]] και [[https://docs.oracle.com/javase/7/docs/api/javax/swing/JRadioButtonMenuItem.html|JRadioButtonMenuItem]] τις οποίες θα δούμε στη συνέχεια. | + | ή [[https://docs.oracle.com/javase/7/docs/api/javax/swing/JRadioButton.html|JRadioButton]]. Άλλες υποκλάσεις της κλάσης //AbstractButton// είναι οι [[https://docs.oracle.com/javase/7/docs/api/javax/swing/JMenuItem.html|JMenuItem]], [[https://docs.oracle.com/javase/7/docs/api/javax/swing/JCheckBoxMenuItem.html|JCheckBoxMenuItem]] και [[https://docs.oracle.com/javase/7/docs/api/javax/swing/JRadioButtonMenuItem.html|JRadioButtonMenuItem]] τις οποίες θα δούμε στη συνέχεια. |
===== Η κλάση JButton ===== | ===== Η κλάση JButton ===== | ||
Line 126: | Line 126: | ||
- Κάθε Button μπορεί να συνδέεται με ένα //keyboard shortcut//. Για να ορίσετε ένα keyboard shortcut χρησιμοποιήστε τη μέθοδο ''public void setMnemonic(int c)'' της κλάσης AbstractButton. | - Κάθε Button μπορεί να συνδέεται με ένα //keyboard shortcut//. Για να ορίσετε ένα keyboard shortcut χρησιμοποιήστε τη μέθοδο ''public void setMnemonic(int c)'' της κλάσης AbstractButton. | ||
- | ===== Η κλάση JCheckBoxButton ===== | + | ===== Η κλάση JCheckBox ===== |
- | Δείτε το παρακάτω παράδειγμα χρήσης της κλάσης JCheckBoxButton από το site της Oracle | + | Ένα //check box// έχει δύο δυνατές καταστάσεις //α)// επιλεγμένο και //β)// απο-επιλεγμένο. Κάθε //check box// υλοποιείται από την κλάση [[https://docs.oracle.com/javase/7/docs/api/javax/swing/JCheckBox.html|JCheckBox]]. Δείτε το παρακάτω παράδειγμα χρήσης της κλάσης JCheckBox από το site της Oracle |
<code java CheckBoxDemo.java> | <code java CheckBoxDemo.java> | ||
Line 322: | Line 322: | ||
Θα χρειαστείτε επιπλέον τις φωτογραφίες που περιέχονται στο αρχείο zip {{:swing:geek-images.zip|}}. | Θα χρειαστείτε επιπλέον τις φωτογραφίες που περιέχονται στο αρχείο zip {{:swing:geek-images.zip|}}. | ||
+ | |||
+ | ===== Οι κλάσεις ButtonGroup και JRadioButton ===== | ||
+ | |||
+ | Τα //radio buttons// είναι ανάλογα με τα //check boxes// με την ιδιαιτερότητα ότι μόνο ένα button μπορεί να είναι επιλεγμένο κάθε φορά. Τα radio buttons οργανώνονται σε button groups. Από τα κουμπιά ενός button group μόνο ένα είναι επιλέξιμο. | ||
+ | |||
+ | Κάθε φορά που ο χρήστης επιλέγει ένα radio button τότε δημιουργείται ένα αντικείμενο τύπου [[http://docs.oracle.com/javase/7/docs/api/java/awt/event/ActionEvent.html|java.awt.events.ActionEvent]] το οποίο λαμβάνεται από ένα αντικείμενο τύπου [[http://docs.oracle.com/javase/7/docs/api/java/awt/event/ActionListener.html|ActionListener]] που συνδέεται με το button. Παράλληλα, δημιουργούνται και δύο αντικείμενα τύπου [[http://docs.oracle.com/javase/7/docs/api/java/awt/event/ItemEvent.html|java.awt.events.ItemEvent]] ένα αντικείμενο για το button που επιλέχθηκε και ένα αντικείμενο για το button που απο-επιλέχθηκε (εάν υπήρξε τέτοιο), τα οποία λαμβάνονται από ένα αντικείμενο του τύπου [[http://docs.oracle.com/javase/7/docs/api/java/awt/event/ItemListener.html|ItemListener]]. Συνήθως χρησιμοποιούμε ItemListeners όπως φαίνεται στο παρακάτω παράδειγμα από το site της Oracle. | ||
+ | |||
+ | <code java RadioButtonDemo.java> | ||
+ | package components; | ||
+ | |||
+ | import java.awt.*; | ||
+ | import java.awt.event.*; | ||
+ | import javax.swing.*; | ||
+ | |||
+ | /* | ||
+ | * RadioButtonDemo.java requires these files: | ||
+ | * images/Bird.gif | ||
+ | * images/Cat.gif | ||
+ | * images/Dog.gif | ||
+ | * images/Rabbit.gif | ||
+ | * images/Pig.gif | ||
+ | */ | ||
+ | public class RadioButtonDemo extends JPanel | ||
+ | implements ActionListener { | ||
+ | static String birdString = "Bird"; | ||
+ | static String catString = "Cat"; | ||
+ | static String dogString = "Dog"; | ||
+ | static String rabbitString = "Rabbit"; | ||
+ | static String pigString = "Pig"; | ||
+ | |||
+ | JLabel picture; | ||
+ | |||
+ | public RadioButtonDemo() { | ||
+ | super(new BorderLayout()); | ||
+ | |||
+ | //Create the radio buttons. | ||
+ | JRadioButton birdButton = new JRadioButton(birdString); | ||
+ | birdButton.setMnemonic(KeyEvent.VK_B); | ||
+ | birdButton.setActionCommand(birdString); | ||
+ | birdButton.setSelected(true); | ||
+ | |||
+ | JRadioButton catButton = new JRadioButton(catString); | ||
+ | catButton.setMnemonic(KeyEvent.VK_C); | ||
+ | catButton.setActionCommand(catString); | ||
+ | |||
+ | JRadioButton dogButton = new JRadioButton(dogString); | ||
+ | dogButton.setMnemonic(KeyEvent.VK_D); | ||
+ | dogButton.setActionCommand(dogString); | ||
+ | |||
+ | JRadioButton rabbitButton = new JRadioButton(rabbitString); | ||
+ | rabbitButton.setMnemonic(KeyEvent.VK_R); | ||
+ | rabbitButton.setActionCommand(rabbitString); | ||
+ | |||
+ | JRadioButton pigButton = new JRadioButton(pigString); | ||
+ | pigButton.setMnemonic(KeyEvent.VK_P); | ||
+ | pigButton.setActionCommand(pigString); | ||
+ | |||
+ | //Group the radio buttons. | ||
+ | ButtonGroup group = new ButtonGroup(); | ||
+ | group.add(birdButton); | ||
+ | group.add(catButton); | ||
+ | group.add(dogButton); | ||
+ | group.add(rabbitButton); | ||
+ | group.add(pigButton); | ||
+ | |||
+ | //Register a listener for the radio buttons. | ||
+ | birdButton.addActionListener(this); | ||
+ | catButton.addActionListener(this); | ||
+ | dogButton.addActionListener(this); | ||
+ | rabbitButton.addActionListener(this); | ||
+ | pigButton.addActionListener(this); | ||
+ | |||
+ | //Set up the picture label. | ||
+ | picture = new JLabel(createImageIcon("images/" | ||
+ | + birdString | ||
+ | + ".gif")); | ||
+ | |||
+ | //The preferred size is hard-coded to be the width of the | ||
+ | //widest image and the height of the tallest image. | ||
+ | //A real program would compute this. | ||
+ | picture.setPreferredSize(new Dimension(177, 122)); | ||
+ | |||
+ | |||
+ | //Put the radio buttons in a column in a panel. | ||
+ | JPanel radioPanel = new JPanel(new GridLayout(0, 1)); | ||
+ | radioPanel.add(birdButton); | ||
+ | radioPanel.add(catButton); | ||
+ | radioPanel.add(dogButton); | ||
+ | radioPanel.add(rabbitButton); | ||
+ | radioPanel.add(pigButton); | ||
+ | |||
+ | add(radioPanel, BorderLayout.LINE_START); | ||
+ | add(picture, BorderLayout.CENTER); | ||
+ | setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); | ||
+ | } | ||
+ | |||
+ | /** Listens to the radio buttons. */ | ||
+ | public void actionPerformed(ActionEvent e) { | ||
+ | picture.setIcon(createImageIcon("images/" | ||
+ | + e.getActionCommand() | ||
+ | + ".gif")); | ||
+ | } | ||
+ | |||
+ | /** Returns an ImageIcon, or null if the path was invalid. */ | ||
+ | protected static ImageIcon createImageIcon(String path) { | ||
+ | java.net.URL imgURL = RadioButtonDemo.class.getResource(path); | ||
+ | if (imgURL != null) { | ||
+ | return new ImageIcon(imgURL); | ||
+ | } else { | ||
+ | System.err.println("Couldn't find file: " + path); | ||
+ | return 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("RadioButtonDemo"); | ||
+ | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | |||
+ | //Create and set up the content pane. | ||
+ | JComponent newContentPane = new RadioButtonDemo(); | ||
+ | newContentPane.setOpaque(true); //content panes must be opaque | ||
+ | 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's GUI. | ||
+ | javax.swing.SwingUtilities.invokeLater(new Runnable() { | ||
+ | public void run() { | ||
+ | createAndShowGUI(); | ||
+ | } | ||
+ | }); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Για το παραπάνω παράδειγμα θα χρειαστείτε τις εικόνες {{:swing:animals.zip|}} | ||