JButton模型中的Java Swing-isRollover()值
我在测试JButton模型中的Java Swing-isRollover()值,java,swing,jbutton,rollover,Java,Swing,Jbutton,Rollover,我在测试按钮模型的行为时遇到了一个奇怪的情况。isRollover()方法不会返回预期的(根据我)值 以下是我刚刚创建的示例代码: import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import
按钮模型的行为时遇到了一个奇怪的情况。isRollover()
方法不会返回预期的(根据我)值
以下是我刚刚创建的示例代码:
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
*
* @author rmu
*/
public class NewClass extends JFrame {
private static final Logger logger = Logger.getLogger(NewClass.class.getName());
static {
logger.setLevel(Level.INFO);
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("Test MVC");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JButton btn = new JButton("Test button");
final JLabel lbl = new JLabel("");
btn.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
logger.log(Level.INFO, "\nButton armed: " + btn.getModel().isArmed()
+ "\nButton pressed: " + btn.getModel().isPressed()
+ "\nButton selected: " + btn.getModel().isSelected()
+ "\nButton rollover: " + btn.getModel().isRollover()
);
lbl.setText(btn.getModel().isRollover() ? "Mouse is over the button" : "Mouse is NOT over the button");
}
});
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));
frame.getContentPane().add(btn);
frame.getContentPane().add(lbl);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
}
回购步骤:
- 将鼠标移到按钮-->一切正常
- 按鼠标键-->一切正常
- (不释放鼠标按钮)移动鼠标,使其不再位于按钮上方-->一切正常
- (不释放…)再次将鼠标移到按钮上-->
isRollback()
方法返回false
(请参阅日志和JLabel
)
这是正确的行为还是错误?我想编写一些使用此属性的代码,但我不确定是否可以依赖它。我不依赖滚动行为。从L&F工具包可以(其中一些确实可以)修改其行为的意义上讲,这并不是真正的标准化
也就是说,实现您自己的鼠标侦听器以获得您想要的行为应该很简单
这是正确的行为还是错误
查看源代码,看看它在做什么
在基本按钮列表中
有以下代码:
public void mouseEntered(MouseEvent e) {
AbstractButton b = (AbstractButton) e.getSource();
ButtonModel model = b.getModel();
if (b.isRolloverEnabled() && !SwingUtilities.isLeftMouseButton(e)) {
model.setRollover(true);
}
if (model.isPressed())
model.setArmed(true);
}
因此,按下鼠标左键时不会设置滚动
只需使用您自己的MouseListener
并收听mouseEntered/mouseExited
事件。,即可使用SwingUtilities.isLeftMouseButton