Java MouseEvents无法正常工作

时间:2010-03-31 11:37:53

标签: java swing awt mouseevent mouseenter

这可能是一个愚蠢的问题,但我不得不问!

我有以下代码片段,当用户与对象交互时,它们应该运行相应的方法。 出于某种原因,“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上运行完美!

4 个答案:

答案 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答案的答案......

如果使用

之类的内容更改Spinner
yourOldSpinner = 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);