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
swing:buttons [2015/05/11 05:37]
gthanos [Η κλάση JButton]
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 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:​animals.zip|}}
  
swing/buttons.1431322666.txt.gz · Last modified: 2016/02/26 11:15 (external edit)