我试图实现以下。JSpinner与自定义渲染器
我想使用为其数据使用数字的JSpinner,但我想让它呈现如下:“6/10”,即“value/maximum”,默认JSpinner只显示“value ”。当然,我正在使用SpinnerNumberModel只能将整数用作数据。
与JCombobox渲染器和/或编辑器,JTable渲染器和/或编辑器相比,我一直在寻找模拟行为......但是看起来JSpinner不能这样工作。我发现this example,用于微调器内的自定义内容。该示例使用JLabel来显示图标,但在我的情况下,我必须能够编辑内容并在点击后输入来检查输入。
所以这是我主要做:
JSpinner spinner = new JSpinner(new SpinnerNumberModel(1,1,10,1));
spinner.setEditor(new CustomSpinnerEditor(spinner));
其中CustomSpinnerEditor正在扩展了JTextField
。我在其上释放了一些输入映射/动作映射(对于输入行为),向微调器添加了一个ChangeListener,以便在用户单击箭头时刷新文本框内容,添加FocusListener以选择focusGained上的所有文本并验证focusLost上的输入,...以及它的工作原理。
所以问题不在于它的工作。问题是,对于一些非常简单的事情来说,这样做太多了,而且我可能会因为不使用默认编辑器而失去一些功能。如果组件只是提供了设置渲染器的能力,那么我就会有一个钩子,我只是用正确的String返回一个JLabel,就像我使用JComboBox一样。
有没有更简单的方法来实现我想要的?