【发布时间】:2011-03-04 04:32:25
【问题描述】:
是否有可能知道,从从 JSpinner 接收 ChangeEvent 的 ChangeListener 内部, 按下了哪个按钮(递增/递减)?
【问题讨论】:
是否有可能知道,从从 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;
}
});
【讨论】:
SpinnerModel?这似乎是一个很好的解决方案。
JSpinner 是一个复合组件,可以将 mouseListeners 添加到它包含的组件中。您必须进行一些试验才能弄清楚如何将按钮彼此以及与文本字段区分开来。一种快速而肮脏的方法是检查它们的坐标。
我不确定你是要迭代 JSpinner 本身包含的组件,还是 JSpinner.getEditor() 返回的容器包含的组件,所以两者都试试。
【讨论】: