按下了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()
返回的容器包含的组件,所以请尝试两者。