Swing/UninstallListeners のバックアップの現在との差分(No.2)
- category: swing folder: UninstallListeners title: MouseListenerなどを削除してコンポーネントの入力操作を制限する tags: [MouseListener, MouseMotionListener, JSlider] author: aterai pubdate: 2015-10-05T00:07:30+09:00 description: MouseListenerやMouseMotionListenerなどを削除することで、JSliderへの入力操作を制限します。 image:
概要
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);
// removeFocusListener(focusListener);
// removeComponentListener(componentListener);
// removePropertyChangeListener( propertyChangeListener );
// getModel().removeChangeListener(changeListener);
}
};
View in GitHub: Java, Kotlin解説
- デフォルトの
JSlider
-
JSlider#setEnabled(false)
で無効化- 表示が変更されて(灰色)、無効状態をユーザーにフィードバック
-
BasicSliderUI#uninstallListeners(...)
、BasicSliderUI#uninstallKeyboardActions(...)
メソッドをリフレクションでアクセス可能に変更して実行 -
Default
- デフォルトの
JSlider
- デフォルトの
-
JSlider#setEnabled(false)
-
JSlider#setEnabled(false)
で無効化 - 表示が灰色に変更されて無効状態が視覚でユーザーにフィードバック可能
-
-
BasicSliderUI#uninstallListeners(...)
-
BasicSliderUI#uninstallListeners(...)
、BasicSliderUI#uninstallKeyboardActions(...)
メソッドをリフレクションでアクセス可能に変更して実行 - 参考: JSlider Problem | Oracle Community
- 無効状態ではないので、ノブなどが灰色にならない
ComponentListener
なども削除されるので、リサイズしても表示は不変
-
-
getMouseListeners()
などで取得したリスナーを削除 -
JSlider#removeMouseListener(...)
-
getMouseListeners()
などで取得したリスナーを削除 MouseListener
とMouseMotionListener
を削除- キー入力は、
setFocusable(false)
で無効化(InputMap
には、JComponent.WHEN_FOCUSED
で登録されているのでフォーカスがなければキー入力できない) - キー入力は
setFocusable(false)
で無効化-
InputMap
にはJComponent.WHEN_FOCUSED
で登録されているのでフォーカスがなければキー入力できない
-
-
参考リンク
- JSlider Problem | Oracle Community
- JLayerで子コンポーネントへの入力を制限する
JDK 1.7.0
以降の場合、JLayer
を使用した入力制限が可能