Swing/UninstallListeners のバックアップ(No.4)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/UninstallListeners へ行く。
- 1 (2017-03-28 (火) 15:31:48)
- 2 (2018-02-08 (木) 16:16:37)
- 3 (2020-02-13 (木) 14:46:54)
- 4 (2021-08-04 (水) 06:47:31)
- 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);
}
};
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
を使用した入力制限が可能