MouseListenerなどを削除してコンポーネントの入力操作を制限する
Total: 5614
, Today: 1
, Yesterday: 7
Posted by aterai at
Last-modified:
概要
MouseListener
やMouseMotionListener
などを削除することで、JSlider
への入力操作を制限します。
Screenshot
Advertisement
サンプルコード
JSlider slider3 = new JSlider(0, 100, 50) {
@Override public void updateUI() {
super.updateUI();
setFocusable(false); //uninstallKeyboardActions
for (MouseListener l: getMouseListeners()) {
removeMouseListener(l);
}
for (MouseMotionListener l: getMouseMotionListeners()) {
removeMouseMotionListener(l);
}
// removeFocusListener(focusListener);
// removeComponentListener(componentListener);
// removePropertyChangeListener( propertyChangeListener );
// getModel().removeChangeListener(changeListener);
}
};
View in GitHub: Java, Kotlin解説
Default
- デフォルトの
JSlider
- デフォルトの
JSlider#setEnabled(false)
JSlider#setEnabled(false)
で無効化- 表示が灰色に変更されて無効状態が視覚でユーザーにフィードバック可能
BasicSliderUI#uninstallListeners(...)
BasicSliderUI#uninstallListeners(...)
、BasicSliderUI#uninstallKeyboardActions(...)
メソッドをリフレクションでアクセス可能に変更して実行- 参考: JSlider Problem | Oracle Community
- 無効状態ではないので、ノブなどが灰色にならない
ComponentListener
なども削除されるので、リサイズしても表示は不変
JSlider#removeMouseListener(...)
getMouseListeners()
などで取得したリスナーを削除MouseListener
とMouseMotionListener
を削除- キー入力は
setFocusable(false)
で無効化InputMap
にはJComponent.WHEN_FOCUSED
で登録されているのでフォーカスがなければキー入力できない
参考リンク
- JSlider Problem | Oracle Community
- JLayerで子コンポーネントへの入力を制限する
JDK 1.7.0
以降の場合、JLayer
を使用した入力制限が可能