6

当我尝试通过键盘或鼠标使 JSpinner 不可编辑时,如下所示:

((DefaultEditor) mySpinner.getEditor()).getTextField().setEditable(false);
mySpinner.setEnabled(false);

它禁用任何键盘输入和粘贴,但我仍然可以单击向上/向下按钮并更改值。

如何禁用向上/向下按钮?

4

2 回答 2

2

如果微调器使用 JSpinner.DefaultEditor 或其子类,则以下代码有效(禁用键盘导航,微调器按钮不起作用,但可以选择和复制微调器中显示的值)。

JSpinner component = ...;

component.setEnabled( false );
if ( component.getEditor() instanceof JSpinner.DefaultEditor ) {
   JSpinner.DefaultEditor editor = ( JSpinner.DefaultEditor ) component.getEditor();
   editor.getTextField().setEnabled( true );
   editor.getTextField().setEditable( false );
}

如果微调器有一个除 JTextComponent 以外的自定义编辑器,那么可能仍然可以使用相同的方法(禁用微调器,重新启用微调器编辑器使用的实际组件,使用它的将该组件标记为只读) API)。

于 2011-08-22T18:15:13.197 回答
-1
// Disabling mouse input without desabling the JSpinner itself
JSpinner spinner = ...;
// set the minimum and maximum values to the current value, 
// thus preventing changes to the spinner's current value
SpinnerNumberModel snm = (SpinnerNumberModel) spinner.getModel();
snm.setMinimum((Integer)spinner.getValue());
snm.setMaximum((Integer)spinner.getValue());
于 2015-10-28T14:33:52.720 回答