按下了JSpinner的哪个按钮?

是否可以从一个从JSpinner接收ChangeEvent的ChangeListener内部知道按下了哪个按钮(递增/递减)?

简答:没有办法知道按下了哪个按钮

答案很长:根据您的模型和您的更改侦听器,如果您在新值和先前值之间进行比较,则可以知道用户是前进还是后退。

您可以检查触发事件的对象。 也许在事件发生之前保存该值并确定它在事件期间是上升还是下降。

将实际值与前一个值进行比较。 方法如下:

ChangeEvent ce = ... ((JSpinner)ce.getSource()).getPreviousValue(); 

您可以通过存储旧值来检查旧值的旧值:

 int currentValue = spinner.getValue(); spinner.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { int value = spinner.getValue(); if(value > currentValue) { // up was pressed } else if(value < currentValue) { // down was pressed } currentValue = value; } }); 

JSpinner是一个复合组件,可以将mouseListeners添加到它包含的组件中。 您需要进行一些实验,以确定如何区分按钮和文本字段。 一种快速而肮脏的方法是检查它们的坐标。

我不确定是否要迭代JSpinner本身包含的组件,或JSpinner.getEditor()返回的容器包含的组件,所以请尝试两者。