Слушаете ролловер на JToggleButton в ChangeListener?

Учитывая, что MouseListeners для кнопок Swing - это большой ноно, как мой JToggleButton может прослушивать события rollover/mouseOver? Код ниже не распечатывает "ролловер".

import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Test {

  public static void main(String[] args) {

  JPanel panel = new JPanel();
  final JToggleButton button = new JToggleButton();
  button.addChangeListener(new ChangeListener() {
    @Override
    public void stateChanged(ChangeEvent arg0) {
        ButtonModel mod = button.getModel();
        if (mod.isRollover()) {
            System.out.println("rollover"); //won't work, unless button is of type JButton
        }
    }
  });
  JFrame frame = new JFrame();
  frame.add(panel);
  panel.add(button);
  frame.setVisible(true);
  frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
  }
}

2 ответа

Решение

Ваш код правильный. Но имейте в виду, что опрокидывание по умолчанию не включено. Итак, вы должны сделать это в первую очередь:

button.setRolloverEnabled(true);
public void setRolloverEnabled(boolean b)
Sets the rolloverEnabled property, which must be true for rollover effects to occur. The default value for the rolloverEnabled property is false. Some look and feels might not implement rollover effects; they will ignore this property.

Вам следует позвонить button.setRolloverEnabled(true);

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