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 revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
swing:buttons [2018/03/22 15:31]
gthanos [Η κλάση JCheckBox]
swing:buttons [2018/03/23 11:30]
gthanos [Η κλάση JCheckBox]
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]] τις οποίες θα δούμε στη συνέχεια.
  
-===== Η κλάση JButton ===== 
  
-Δείτε, μεταγλωττίστε και τρέξτε το παρακάτω παράδειγμα από [[https://docs.oracle.com/javase/tutorial/uiswing/components/button.html|το site της Oracle]] (αλλαγμένο), το οποίο και θα συζητήσουμε στη συνέχεια. 
-<code java ButtonDemo.java> 
-import javax.swing.AbstractButton; 
-import javax.swing.JButton; 
-import javax.swing.JPanel; 
-import javax.swing.JFrame; 
-import javax.swing.ImageIcon; 
- 
-import java.awt.event.ActionEvent; 
-import java.awt.event.ActionListener; 
-import java.awt.event.KeyEvent; 
-import java.awt.event.MouseAdapter; 
- 
- 
-/*  
- * ButtonDemo.java requires the following files: 
-   right.gif 
-   middle.gif 
-   left.gif 
- */ 
-public class ButtonDemo extends JPanel 
-            implements ActionListener { 
-  protected JButton b1, b2, b3; 
- 
-  public ButtonDemo() { 
-    ImageIcon leftButtonIcon = new ImageIcon("right.gif"); 
-    ImageIcon middleButtonIcon = new ImageIcon("middle.gif"); 
-    ImageIcon rightButtonIcon = new ImageIcon("left.gif"); 
- 
-    b1 = new JButton("Disable middle button", leftButtonIcon); 
-    b1.setVerticalTextPosition(AbstractButton.CENTER); 
-    b1.setHorizontalTextPosition(AbstractButton.LEFT); 
-    b1.setMnemonic(KeyEvent.VK_D); 
-    b1.setActionCommand("disable"); 
- 
-    b2 = new JButton("Middle button", middleButtonIcon); 
-    b2.setVerticalTextPosition(AbstractButton.BOTTOM); 
-    b2.setHorizontalTextPosition(AbstractButton.CENTER); 
-    b2.setMnemonic(KeyEvent.VK_M); 
-    b2.setActionCommand("middle");     
- 
-    b3 = new JButton("Enable middle button", rightButtonIcon);     
-    b3.setMnemonic(KeyEvent.VK_E); 
-    b3.setActionCommand("enable"); 
-    b3.setEnabled(false); 
- 
-    //Listen for actions on buttons 1 and 3. 
-    b1.addActionListener(this); 
-    b2.addActionListener(this); 
-    b3.addActionListener(this);     
- 
-    b1.setToolTipText("Click this button to disable the middle button."); 
-    b2.setToolTipText("This middle button does nothing when you click it."); 
-    b3.setToolTipText("Click this button to enable the middle button."); 
- 
-    //Add Components to this container, using the default FlowLayout. 
-    add(b1); 
-    add(b2); 
-    add(b3); 
-  } 
- 
-  public void actionPerformed(ActionEvent e) { 
-    if ("disable".equals(e.getActionCommand())) { 
-      b2.setEnabled(false); 
-      b1.setEnabled(false); 
-      b3.setEnabled(true); 
-    } else if ("enable".equals(e.getActionCommand())){ 
-      b2.setEnabled(true); 
-      b1.setEnabled(true); 
-      b3.setEnabled(false); 
-    } else if ("middle".equals(e.getActionCommand())){ 
-      b2.setEnabled(false); 
-      b1.setEnabled(false); 
-      b3.setEnabled(true); 
-    } 
-  } 
-   
-  /** 
-   * 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("ButtonDemo"); 
-    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
- 
-    //Create and set up the content pane. 
-    ButtonDemo newContentPane = new ButtonDemo(); 
-    newContentPane.setOpaque(true); //content panes must be opaque 
-    frame.setContentPane(newContentPane); 
- 
-    //Size and 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:buttondemoimages.zip|}}. Από τον κώδικα μπορούμε να εξάγουμε τα εξής: 
-  - Κάθε αντικείμενο [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JButton.html|JButton]] μπορεί να περιέχει κείμενο και ένα εικονίδιο σε αναλογία με τα αντικείμενα τύπου JLabel. Επιπλέον, μπορεί να περιέχει και HTML όπως και τα [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html|JLabel]] (δεν εμφανίζεται στο παραπάνω παράδειγμα).  
-  - Για κάθε [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JButton.html|JButton]] οφείλουμε να ορίσουμε τουλάχιστον ένα αντικείμενο τύπου [[https://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionListener.html|ActionListener]] το οποίο ακούει στα //clicks// του ποντικιού πάνω στο //button//. 
-  - Το //click// ενός **JButton** μπορεί να ανατεθεί σε ένα //keyboard shortcut//. Για να ορίσετε ένα keyboard shortcut χρησιμοποιήστε τη μέθοδο ''public void setMnemonic(int c)'' της κλάσης [[https://docs.oracle.com/javase/8/docs/api/javax/swing/AbstractButton.html|AbstractButton]]. 
- 
-===== Η κλάση 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 ===== ===== Οι κλάσεις ButtonGroup και JRadioButton =====
swing/buttons.txt · Last modified: 2018/03/27 19:38 (external edit)