Keeping in mind that MouseListeners for Swing buttons is a big nono, how can my JToggleButton listen for rollover/mouseOver events? The code below does not print out "rollover".

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);
  }
}
有帮助吗?

解决方案

Your code is correct. But, keep in mind that rollover is not enabled by default. So, you have to do this first:

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.

You should call button.setRolloverEnabled(true);

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top