JSpinnerを次のようにキーボードまたはマウスで編集できないようにしようとすると、次のようになります。
((DefaultEditor) mySpinner.getEditor()).getTextField().setEditable(false);
mySpinner.setEnabled(false);
キーボードの入力と貼り付けは無効になりますが、上/下ボタンをクリックして値を変更することはできます。
上/下ボタンを無効にするにはどうすればよいですか?
スピナーが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)。
// 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());