JSpinners与共享SpinnerModel

时间:2011-10-06 14:58:04

标签: java swing jspinner

我正在尝试设置多个JSpinner来编辑单个Date值 - 即一个微调器,几天,一个月等等。

似乎我应该能够在几个JSpinner之间共享一个SpinnerModel,但是我遇到了这种方法的困难。

我尝试的内容基本如下:

SpinnerDateModel model = new SpinnerDateModel();
JSpinner dayPeer = new JSpinner(model);
dayPeer.setEditor(new JSpinner.DateEditor(dayPeer, "dd"));
JSpinner monthPeer = new JSpinner(model);
monthPeer.setEditor(new JSpinner.DateEditor(monthPeer, "MM"));

执行此操作时,我发现更改一个值会重置另一个值。问题似乎源于JSpinner.DefaultEditor.propertyChange(),它将编辑器文本解析为日期,然后用setValue()调用。{/ p>

因此,看起来我还需要使用自定义propertyChange()方法实现自定义编辑器组件。我最终走上了正确的轨道,还是我错过了一些明显的东西?

2 个答案:

答案 0 :(得分:4)

也许在How to Use Spinners的Swing教程中找到的CyclingSpinnerListModel会给你一些想法。

答案 1 :(得分:2)

我建议JCalendar和这些相关主题。它具有出色的日期微调器支持。

JSpinnerDateEditor jsde = new JSpinnerDateEditor();
JDateChooser spinner = new JDateChooser(jsde);
this.add(spinner);

附录:作为替代方案,请考虑使用绑定到标准JSpinner.DateEditorincrementdecrement操作,而不是使用单独的微调器。