swing:buttons

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
swing:buttons [2015/05/11 05:37]
gthanos [Η κλάση JButton]
swing:buttons [2015/05/11 06:20]
gthanos [Οι κλάσεις ButtonGroup και JRadioButton]
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 320: Line 320:
 } }
 </​code>​ </​code>​
 +
 +Θα χρειαστείτε επιπλέον τις φωτογραφίες που περιέχονται στο αρχείο 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/buttons.txt · Last modified: 2016/02/26 11:15 (external edit)