This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | Next revision Both sides next revision | ||
|
swing:buttons [2018/03/23 11:29] gthanos [Η κλάση JButton] |
swing:buttons [2018/03/23 11:30] gthanos [Η κλάση JCheckBox] |
||
|---|---|---|---|
| Line 5: | Line 5: | ||
| - | ===== Η κλάση JCheckBox ===== | ||
| - | |||
| - | Ένα //check box// έχει δύο δυνατές καταστάσεις //α)// επιλεγμένο και //β)// απο-επιλεγμένο. Κάθε //check box// υλοποιείται από την κλάση [[https:// | ||
| - | |||
| - | <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-cg--.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(" | ||
| - | chinButton.setMnemonic(KeyEvent.VK_C); | ||
| - | chinButton.setSelected(true); | ||
| - | |||
| - | glassesButton = new JCheckBox(" | ||
| - | glassesButton.setMnemonic(KeyEvent.VK_G); | ||
| - | glassesButton.setSelected(true); | ||
| - | |||
| - | hairButton = new JCheckBox(" | ||
| - | hairButton.setMnemonic(KeyEvent.VK_H); | ||
| - | hairButton.setSelected(true); | ||
| - | |||
| - | teethButton = new JCheckBox(" | ||
| - | 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(" | ||
| - | |||
| - | //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, | ||
| - | checkPanel.add(chinButton); | ||
| - | checkPanel.add(glassesButton); | ||
| - | checkPanel.add(hairButton); | ||
| - | checkPanel.add(teethButton); | ||
| - | |||
| - | add(checkPanel, | ||
| - | add(pictureLabel, | ||
| - | setBorder(BorderFactory.createEmptyBorder(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 = ' | ||
| - | } else if (source == glassesButton) { | ||
| - | index = 1; | ||
| - | c = ' | ||
| - | } else if (source == hairButton) { | ||
| - | index = 2; | ||
| - | c = ' | ||
| - | } else if (source == teethButton) { | ||
| - | index = 3; | ||
| - | c = ' | ||
| - | } | ||
| - | |||
| - | //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, | ||
| - | |||
| - | updatePicture(); | ||
| - | } | ||
| - | |||
| - | protected void updatePicture() { | ||
| - | //Get the icon corresponding to the image. | ||
| - | ImageIcon icon = new ImageIcon( | ||
| - | " | ||
| - | + choices.toString() | ||
| - | + " | ||
| - | pictureLabel.setIcon(icon); | ||
| - | pictureLabel.setToolTipText(choices.toString()); | ||
| - | if (icon == null) { | ||
| - | pictureLabel.setText(" | ||
| - | } 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(" | ||
| - | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
| - | |||
| - | //Create and set up the content pane. | ||
| - | JComponent newContentPane = new CheckBoxDemo(); | ||
| - | newContentPane.setOpaque(true); | ||
| - | 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' | ||
| - | javax.swing.SwingUtilities.invokeLater(new Runnable() { | ||
| - | public void run() { | ||
| - | createAndShowGUI(); | ||
| - | } | ||
| - | }); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Για να εκτελέσετε με επιτυχία το παραπάνω πρόγραμμα, | ||
| ===== Οι κλάσεις ButtonGroup και JRadioButton ===== | ===== Οι κλάσεις ButtonGroup και JRadioButton ===== | ||