2011-08-01 31 views
6

私はこのようなキーボードやマウスでJSpinnerの未編集可能にしてみてください。JSpinnerのキーボード入力とマウス入力を無効にするにはどうすればよいですか?

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

これは、任意のキーボード入力と貼り付けを無効にしますが、私はまだアップ/ダウンボタンをクリックし、値を変更することができます。

どのようにして上/下ボタンを無効にできますか?

答えて

1

スピナーが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を使用して読み取り専用として)。

-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());