Изменение фона кнопки после ее нажатия (т.е. после выполнения действия)

Я пытаюсь изменить фон JButton после его нажатия. В настоящее время мои кнопки расположены в GridLayout (3x3) и выглядят так:

tiles.add(new JButton(new AbstractAction("") {
    @Override
    public void actionPerformed(ActionEvent e) {
        this.setIcon("foo.png");
    }
}));

Это не работает. Как мне манипулировать фоном изображения изнутри выполненного действия?

2 ответа

Решение

JToggleButton может быть идеально подходит для этого, как показано на нажатие Swing JToolbarButton

Обратите внимание, что вам нужно будет добавить код, чтобы кнопка была кликабельной только один раз.

В качестве альтернативы вы можете использовать стандарт JButton и позвонить AbstractButton.setDisabledIcon(Icon), Отключите кнопку при нажатии, и она переключится на альтернативный значок.

Вы можете создать свой собственный слушатель, который реализует MouseListener. Таким образом, вы можете контролировать, когда фон кнопки меняется (когда мышь отпущена, нажата и т. Д.). Вот пример

//Add the listener to the button
      myButton.addMouseListener(new customActionListener());

//Create the listener
    class customActionListener implements MouseListener {
        public void mouseExited(MouseEvent e) {
        }

        public void mouseEntered(MouseEvent e) {
        }

        public void mouseReleased(MouseEvent e) {
        }

        public void mousePressed(MouseEvent e) {
        Icon icon = new ImageIcon("icon.gif");
        myButton.setIcon(icon);

        }

        public void mouseClicked(MouseEvent e) {
        }
    }

В любой момент, когда вы хотите установить фон по умолчанию, используйте:

myButton.setIcon(new ImageIcon());

Другие вопросы по тегам