User Tools

Site Tools


swing:buttons

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
swing:buttons [2018/03/23 11:29] – [Η κλάση JButton] gthanosswing:buttons [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 4: Line 4:
  ή [[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]] τις οποίες θα δούμε στη συνέχεια.  ή [[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]] τις οποίες θα δούμε στη συνέχεια.
  
 +  * [[swing:jbutton|Buttons]]
 +  * [[swing:jcheckbox|CheckBoxes]]
 +  * [[swing:jradiobutton|RadioButtons]]
  
-===== Η κλάση JCheckBox ===== 
- 
-Ένα //check box// έχει δύο δυνατές καταστάσεις //α)// επιλεγμένο και //β)// απο-επιλεγμένο. Κάθε //check box// υλοποιείται από την κλάση [[https://docs.oracle.com/javase/7/docs/api/javax/swing/JCheckBox.html|JCheckBox]]. Δείτε το παρακάτω παράδειγμα χρήσης της κλάσης JCheckBox από το [[https://docs.oracle.com/javase/tutorial/uiswing/components/button.html|site της Oracle]]. 
- 
-<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-c---.gif, geek--g--.gif, geek---h-.gif, geek----t.gif, 
- * geek-cg--.gif, ..., geek-cght.gif. 
- */ 
-public class CheckBoxDemo extends JPanel 
-              implements ItemListener { 
-  JCheckBox chinButton; 
-  JCheckBox glassesButton; 
-  JCheckBox hairButton; 
-  JCheckBox teethButton; 
- 
-  StringBuffer choices; 
-  JLabel pictureLabel; 
- 
-  public CheckBoxDemo() { 
-    super(new BorderLayout()); 
- 
-    //Create the check boxes. 
-    chinButton = new JCheckBox("Chin"); 
-    chinButton.setMnemonic(KeyEvent.VK_C); 
-    chinButton.setSelected(true); 
- 
-    glassesButton = new JCheckBox("Glasses"); 
-    glassesButton.setMnemonic(KeyEvent.VK_G); 
-    glassesButton.setSelected(true); 
- 
-    hairButton = new JCheckBox("Hair"); 
-    hairButton.setMnemonic(KeyEvent.VK_H); 
-    hairButton.setSelected(true); 
- 
-    teethButton = new JCheckBox("Teeth"); 
-    teethButton.setMnemonic(KeyEvent.VK_T); 
-    teethButton.setSelected(true); 
- 
-    //Register a listener for the check boxes. 
-    chinButton.addItemListener(this); 
-    glassesButton.addItemListener(this); 
-    hairButton.addItemListener(this); 
-    teethButton.addItemListener(this); 
- 
-    //Indicates what's on the geek. 
-    choices = new StringBuffer("cght"); 
- 
-    //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 checkPanel = new JPanel(new GridLayout(0, 1)); 
-    checkPanel.add(chinButton); 
-    checkPanel.add(glassesButton); 
-    checkPanel.add(hairButton); 
-    checkPanel.add(teethButton); 
- 
-    add(checkPanel, BorderLayout.LINE_START); 
-    add(pictureLabel, BorderLayout.CENTER); 
-    setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); 
-  } 
- 
-  /** 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 = 'c'; 
-    } else if (source == glassesButton) { 
-      index = 1; 
-      c = 'g'; 
-    } else if (source == hairButton) { 
-      index = 2; 
-      c = 'h'; 
-    } else if (source == teethButton) { 
-      index = 3; 
-      c = 't'; 
-    } 
- 
-    //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, c); 
- 
-    updatePicture(); 
-  } 
- 
-  protected void updatePicture() { 
-    //Get the icon corresponding to the image. 
-    ImageIcon icon = new ImageIcon( 
-                  "geek/geek-" 
-                  + choices.toString() 
-                  + ".gif"); 
-    pictureLabel.setIcon(icon); 
-    pictureLabel.setToolTipText(choices.toString()); 
-    if (icon == null) { 
-      pictureLabel.setText("Missing Image"); 
-    } 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("CheckBoxDemo"); 
-    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
- 
-    //Create and set up the content pane. 
-    JComponent newContentPane = new CheckBoxDemo(); 
-    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> 
- 
-Για να εκτελέσετε με επιτυχία το παραπάνω πρόγραμμα, θα χρειαστείτε επιπλέον τις φωτογραφίες που περιέχονται στο αρχείο 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> 
- 
-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:labels | Η κλάση JLabel ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:swing:text_fields | TextFields & TextAreas]] |
swing/buttons.1521804567.txt.gz · Last modified: 2018/03/23 11:29 (external edit)