Changing a JButton text when clicked

前端 未结 3 1147
清酒与你
清酒与你 2020-12-17 04:49

I have created a class which extends JDialog, where I have some checkboxes and 3 buttons: accept, cancel, and select all.

When user clicks select all, every checkbox

相关标签:
3条回答
  • 2020-12-17 05:39

    event.getSource() to access the clicked button

    0 讨论(0)
  • 2020-12-17 05:47

    The button does not disappear, it just becomes too wide to fit in the window. Just redraw the component when changing the button label :

    @Override
    public void actionPerformed(ActionEvent e) {
        if(allCheckBoxesSelected){
            allCheckBoxesSelected = false;
            allButton.setText("Select all");
        } else {
            allCheckBoxesSelected = true;
            allButton.setText("Unselect all");
            NodeSelectionCheckBoxJDialog.this.pack();
        }
    }
    
    0 讨论(0)
  • 2020-12-17 05:52

    another way is use ButtonModel that implemeted interesting methods for example

    enter image description here

    enter image description here

    enter image description here

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.AbstractBorder;
    import javax.swing.border.Border;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    
    public class TextAreaInButton {
    
        private JFrame frame = new JFrame("sssssssss");
        private JButton tip1Null = new JButton(" test button ");
    
        public TextAreaInButton() {
            Border line, raisedbevel, loweredbevel, title, empty;
            line = BorderFactory.createLineBorder(Color.black);
            raisedbevel = BorderFactory.createRaisedBevelBorder();
            loweredbevel = BorderFactory.createLoweredBevelBorder();
            title = BorderFactory.createTitledBorder("");
            empty = BorderFactory.createEmptyBorder(1, 1, 1, 1);
            final Border compound;
            Color crl = (Color.blue);
            compound = BorderFactory.createCompoundBorder(empty, new OldRoundedBorderLine(crl));
            Color crl1 = (Color.red);
            final Border compound1;
            compound1 = BorderFactory.createCompoundBorder(empty, new OldRoundedBorderLine(crl1));
            Color crl2 = (Color.black);
            final Border compound2;
            compound2 = BorderFactory.createCompoundBorder(empty, new OldRoundedBorderLine(crl2));
            tip1Null.setFont(new Font("Serif", Font.BOLD, 14));
            tip1Null.setForeground(Color.darkGray);
            tip1Null.setPreferredSize(new Dimension(50, 30));
            tip1Null.addActionListener(new java.awt.event.ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                }
            });
            tip1Null.setBorderPainted(true);
            tip1Null.setFocusPainted(false);
            tip1Null.setBorder(compound);
            tip1Null.setHorizontalTextPosition(SwingConstants.CENTER);
            tip1Null.setVerticalTextPosition(SwingConstants.BOTTOM);
    
            tip1Null.getModel().addChangeListener(new ChangeListener() {
    
                @Override
                public void stateChanged(ChangeEvent e) {
                    ButtonModel model = (ButtonModel) e.getSource();
                    if (model.isRollover()) {
                        tip1Null.setBorder(compound1);
                    } else {
                        tip1Null.setBorder(compound);
                    }
                    if (model.isPressed()) {
                        tip1Null.setBorder(compound2);
                        String btnText = (tip1Null.getText());
                        if (btnText.equals("Selected")) {
                            tip1Null.setText("Un_Selected");
                        } else {
                            tip1Null.setText("Selected");
                        }
                    }
                }
            });
    
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(tip1Null, BorderLayout.CENTER);
            frame.setLocation(150, 150);
            frame.setPreferredSize(new Dimension(310, 75));
            frame.setLocationRelativeTo(null);
            frame.pack();
            frame.setVisible(true);
        }
    
        public static void main(String args[]) {
            EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    TextAreaInButton taib = new TextAreaInButton();
                }
            });
        }
    }
    
    class OldRoundedBorderLine extends AbstractBorder {
    
        private final static int MARGIN = 5;
        private static final long serialVersionUID = 1L;
        private Color color;
    
        OldRoundedBorderLine(Color clr) {
            color = clr;
        }
    
        public void setColor(Color clr) {
            color = clr;
        }
    
        @Override
        public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
            ((Graphics2D) g).setRenderingHint(
                    RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g.setColor(color);
            g.drawRoundRect(x, y, width, height, MARGIN, MARGIN);
        }
    
        @Override
        public Insets getBorderInsets(Component c) {
            return new Insets(MARGIN, MARGIN, MARGIN, MARGIN);
        }
    
        @Override
        public Insets getBorderInsets(Component c, Insets insets) {
            insets.left = MARGIN;
            insets.top = MARGIN;
            insets.right = MARGIN;
            insets.bottom = MARGIN;
            return insets;
        }
    }
    
    0 讨论(0)
提交回复
热议问题