这可能是一个愚蠢的问题,但我不得不问!
我有以下代码片段,当用户与对象交互时,它们应该运行相应的方法。 出于某种原因,“foo”从不打印,但“bar”是。
myJSpinner1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
System.out.println("foo"); //"foo" is not printed
}
});
myJSpinner2.addChangeListener(new java.awt.event.ChangeListener() {
public void stateChanged(java.awt.event.ChangeEvent evt) {
System.out.println("bar"); //"bar" is printed
}
});
我没有异常或堆栈跟踪。我在MouseListener中缺少什么? 提前谢谢。
编辑: MouseEntered在完全相同的JCheckBox上运行完美!
答案 0 :(得分:3)
JSpinner
是一个复合组件,由文本字段和2个按钮组成。通过迭代getComponents()
的结果并为每个结果添加一个监听器,可以将鼠标监听器添加到所有这些监听器。
然而,根据我的经验,当某些东西需要那么多工作时,你可能会采取错误的方式。
为什么需要JSpinner
的鼠标输入信息?
你想对这个活动做什么?
<强>更新强> 如果您希望提供有关面板中所有控件的信息,您可能需要查看使用玻璃板来检测鼠标下的组件。
Alexander Potochkin的A Well-behaved Glasspane是一个很好的起点。
答案 1 :(得分:2)
这是猜测,但我怀疑您需要在MouseListener
的编辑器中添加JSpinner
(通过调用getEditor()
)。我想编辑器Component
占据了JSpinner
中的所有可用空间,因此拦截了所有MouseEvent
。
答案 2 :(得分:2)
这对我有用。
JSpinner spinner = new JSpinner();
((JSpinner.DefaultEditor)spinner.getEditor()).getTextField().addMouseListener(
new java.awt.event.MouseAdapter() {
public void mouseClicked(final MouseEvent e) {
// add code here
}
});
我需要这个以便唤起弹出键对话框,以便根据我们的软件要求增加可用性。
答案 3 :(得分:0)
@Rapier答案的答案......
如果使用
之类的内容更改SpinneryourOldSpinner = new JSpinner(new SpinnerModel(...))
你将失去你早先的MouseListener ......
如果您需要更改SpinnerModel
的内容,请不要创建新内容,而是更改其参数! (如果你这样做,你需要再次重新分配MouseListener,因为当你分配一个新的SpinnerModel时它会丢失。)
一个例子(我在说......):
((SpinnerNumberModel)yourOldSpinner.getModel()).setValue(size/3);
((SpinnerNumberModel)yourOldSpinner.getModel()).setMinimum(0);
((SpinnerNumberModel)yourOldSpinner.getModel()).setMaximum(isize/2);
((SpinnerNumberModel)yourOldSpinner.getModel()).setStepSize(1);