set and disable icons of JToggleButton

后端 未结 2 2098
甜味超标
甜味超标 2020-11-27 22:54

hi there i am trying to make a matching memory game which i use JToggleButton. the main thing is when i press to button it must show a picture and i must find the other same

相关标签:
2条回答
  • 2020-11-27 23:35

    1) for JToggleButton is better to implement ItemListener

    2) here is SSCCE

    enter image description here

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class ButtonsIcon extends JFrame {
    
        private static final long serialVersionUID = 1L;
        private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
        private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon");
        private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon");
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    ButtonsIcon t = new ButtonsIcon();
                }
            });
        }
    
        public ButtonsIcon() {
            setLayout(new GridLayout(2, 2, 4, 4));
    
            JButton button = new JButton();
            button.setBorderPainted(false);
            button.setBorder(null);
            button.setFocusable(false);
            button.setMargin(new Insets(0, 0, 0, 0));
            button.setContentAreaFilled(false);
            button.setIcon((errorIcon));
            button.setRolloverIcon((infoIcon));
            button.setPressedIcon(warnIcon);
            button.setDisabledIcon(warnIcon);
            add(button);
    
            JButton button1 = new JButton();
            button1.setBorderPainted(false);
            button1.setBorder(null);
            button1.setFocusable(false);
            button1.setMargin(new Insets(0, 0, 0, 0));
            button1.setContentAreaFilled(false);
            button1.setIcon((errorIcon));
            button1.setRolloverIcon((infoIcon));
            button1.setPressedIcon(warnIcon);
            button1.setDisabledIcon(warnIcon);
            add(button1);
            button1.setEnabled(false);
    
            final JToggleButton toggleButton = new JToggleButton();
            toggleButton.setIcon((errorIcon));
            toggleButton.setRolloverIcon((infoIcon));
            toggleButton.setPressedIcon(warnIcon);
            toggleButton.setDisabledIcon(warnIcon);
            toggleButton.addItemListener(new ItemListener() {
    
                @Override
                public void itemStateChanged(ItemEvent e) {
                    if (toggleButton.isSelected()) {
                    } else {
                    }
                }
            });
            add(toggleButton);
    
            final JToggleButton toggleButton1 = new JToggleButton();
            toggleButton1.setIcon((errorIcon));
            toggleButton1.setRolloverIcon((infoIcon));
            toggleButton1.setPressedIcon(warnIcon);
            toggleButton1.setDisabledIcon(warnIcon);
            toggleButton1.addItemListener(new ItemListener() {
    
                @Override
                public void itemStateChanged(ItemEvent e) {
                    if (toggleButton1.isSelected()) {
                    } else {
                    }
                }
            });
            add(toggleButton1);
            toggleButton1.setEnabled(false);
    
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pack();
            setVisible(true);
        }
    }
    
    0 讨论(0)
  • 2020-11-27 23:42

    One approach is to do the following:

    • Use the selected state to indicate whether to show or hide the Icon.
    • Use the enabled state to indicate that a pair has been matched.

    Code outline:

    /** Handle ItemEvents. */
    @Override
    public void itemStateChanged(ItemEvent e) {
        GameButton gb = (GameButton) e.getItem();
        gb.setState();
    }
    
    /** Remove a and b from play. */
    private void retirePair(GameButton a, GameButton b) {
        a.setSelected(true);
        a.setEnabled(false);
        b.setSelected(true);
        b.setEnabled(false);
    }
    
    class GameButton extends JToggleButton {
        ...
        public void setState() {
            if (this.isSelected() || !this.isEnabled()) {
                this.setIcon(icon);
            } else {
                this.setIcon(hidden);
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题