Динамически изменить значок jButton - PullRequest
3 голосов
/ 01 ноября 2011

У меня есть программа, которая определяет, когда определенные машины подключены к сети, и создает кнопку с зеленым значком «онлайн», чтобы показать это.Я хочу добавить функциональность, чтобы периодически проверять, подключен ли этот компьютер к сети, а если нет, замените значок на значок «офлайн», который я уже определил.

Ответы [ 5 ]

8 голосов
/ 01 ноября 2011
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

возможно, у вас проблемы с Concurency в Swing , это означает, что весь код Swing должен быть выполнен в EDT

тогда вы должны обернуть myButton.setIcon(myIcon) в invokeLater(), например

SwingUtilities.invokeLater(new Runnable() {

    @Override
    public void run() {
        myButton.setIcon(myIcon);
    }
});
4 голосов
/ 01 ноября 2011

У меня есть программа, которая определяет, когда определенные машины подключены к сети, и создает кнопку с зеленым значком «онлайн», чтобы показать это.

Используйте взамен JToggleButton, как показано здесь 1 & здесь 2.

Я не могу найти способ сделать это, когда кнопка уже была отображена.

Чтобы переключить состояние и запустить событие действияdoClick() или попеременно setSelected(boolean).

Скриншоты

  1. image
  2. image
1 голос
/ 22 октября 2014
btn1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/url.png")));
1 голос
/ 01 ноября 2011

Вы должны быть в состоянии сделать это, используя AbstractButton.setIcon () . Может потребоваться, чтобы вы вызвали invalidate() на кнопке, чтобы отобразить изменение.

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 голосов
/ 14 июня 2016

вы можете добавить слушателя действия на кнопку, затем в вызываемой функции сменить иконку - вот пример:

public yourDialogSwing() {

        Yourbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                onButtonPressed();
            }
        });
}

private void onButtonPressed() {
       YourButton.setIcon(YourButton.getPressedIcon());
}
...