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:39]
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 321: Line 321:
 </​code>​ </​code>​
  
-Θα χρειαστείτε της φωτογραφίες που περιέχονται στο ​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|}}
  
swing/buttons.1431322787.txt.gz · Last modified: 2016/02/26 11:15 (external edit)