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)
- 5 (2025-01-03 (金) 08:57:02)
- 6 (2025-01-03 (金) 09:01:23)
- 7 (2025-01-03 (金) 09:02:38)
- 8 (2025-01-03 (金) 09:03:21)
- 9 (2025-01-03 (金) 09:04:02)
- 10 (2025-06-19 (木) 12:41:37)
- 11 (2025-06-19 (木) 12:43:47)
- 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
を使用した入力制限が可能