Dynamically change jButton icon

﹥>﹥吖頭↗ 提交于 2019-12-20 02:33:22

问题


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 periodically if this machine is still online, and if it's not, change the icon to the "offline" icon that I've already defined.


回答1:


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);
    }
});



回答2:


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




回答3:


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);



回答4:


btn1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/url.png")));



回答5:


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());
}


来源:https://stackoverflow.com/questions/7966287/dynamically-change-jbutton-icon

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!