Prevent JButton repaint() after click

后端 未结 3 1171
情歌与酒
情歌与酒 2021-01-27 08:38

I have a button. I want to change the background after I click on it. My problem here is the button auto call paintComponent(). How can prevent this? I expect after

3条回答
  •  余生分开走
    2021-01-27 09:23

    I created a toggle button.

    You set the primary color and the alternate color in the class constructor.

    When you call the switchColors method, the JButton background changes from the primary color to the alternate color. When you call the switchColors method again, the JButton background changes from the alternate color to the primary color.

    In the following example, I put the switchColors method in the actionListener so you can see the color change. Each time you left-click on the JButton, the background color changes.

    You would call the switchColors method when you want the JButton background to change from blue to red, and again when you want the JButton background to change from red to blue. It's under your control.

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    
    public class ButtonDemo extends JButton 
            implements ActionListener {
    
        private static final long serialVersionUID = 1L;
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    JFrame frame = new JFrame("Button Demo");
                    frame.setDefaultCloseOperation(
                            JFrame.EXIT_ON_CLOSE);
                    JPanel contentPane = new JPanel();
                    contentPane.setLayout(new BorderLayout());
                    frame.setContentPane(contentPane);
                    contentPane.add(new ButtonDemo(Color.BLUE, 
                            Color.RED));
                    frame.setSize(300, 300);
                    frame.setLocationByPlatform(true);
                    frame.setVisible(true);
                }
            });
        }
    
        private boolean primaryBackground;
    
        private Color primaryColor;
        private Color alternateColor;
    
        public ButtonDemo(Color primaryColor, 
                Color alternateColor) {
            this.primaryColor = primaryColor;
            this.alternateColor = alternateColor;
            this.primaryBackground = true;
    
            this.setText("BUTTON TEXT");
            this.setBackground(primaryColor);
            this.addActionListener(this);
        }
    
        public void switchColors() {
            primaryBackground = !primaryBackground;
            Color color = primaryBackground ? primaryColor :
                alternateColor;
            this.setBackground(color);
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            switchColors();
        }
    
    }
    

提交回复
热议问题