Dynamically change jButton icon

后端 未结 5 1223
Happy的楠姐
Happy的楠姐 2021-01-19 22:14

I have a program that detects when certain machines are online and creates a button with a green \"online\" icon to show this. I want to add the functionality to check perio

相关标签:
5条回答
  • 2021-01-19 22:18

    I have a program that detects when certain machines are online and creates a button with a green "online" icon to show this.

    Use a JToggleButton instead, as shown here1 & here2.

    I can't figure out a way to do it once the button has already been displayed.

    To toggle the state and fire an action event doClick() or alternately setSelected(boolean).

    Screenshots

    0 讨论(0)
  • 2021-01-19 22:24

    You should be able to do so using AbstractButton.setIcon(). It may require you to call invalidate() on the button to get the change displayed.

    changeButton = new JButton(icon1);
    changeButton.addActionListener(
        new ActionListener( )
        {
            private boolean flag = true;
    
            @Override
            public void actionPerformed( ActionEvent arg0 )
            {
                changeButton.setIcon( flag ? icon2 : icon1 );
                flag = !flag;
            }
        }
    );
    add(changeButton);
    
    0 讨论(0)
  • 2021-01-19 22:38

    you can add an action listener on the button, then in its called function change the icon - here is an example :

    public yourDialogSwing() {
    
            Yourbutton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    onButtonPressed();
                }
            });
    }
    
    private void onButtonPressed() {
           YourButton.setIcon(YourButton.getPressedIcon());
    }
    
    0 讨论(0)
  • 2021-01-19 22:39

    I know how to set the icon, however I can't figure out a way to do it once the button has already been displayed

    probably you have issues with Concurency in Swing, that means that all Swing code must be done on EDT

    then you have to wrap myButton.setIcon(myIcon) to the invokeLater(), for example

    SwingUtilities.invokeLater(new Runnable() {
    
        @Override
        public void run() {
            myButton.setIcon(myIcon);
        }
    });
    
    0 讨论(0)
  • 2021-01-19 22:44
    btn1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/url.png")));
    
    0 讨论(0)
提交回复
热议问题