MouseListenerなどを削除してコンポーネントの入力操作を制限する
Total: 6282, Today: 1, Yesterday: 0
Posted by aterai at
Last-modified:
Summary
MouseListenerやMouseMotionListenerなどを削除することで、JSliderへの入力操作を制限します。
Screenshot

Advertisement
Source Code Examples
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, KotlinDescription
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で登録されているのでフォーカスがなければキー入力できない
Reference
- JSlider Problem | Oracle Community
- JLayerで子コンポーネントへの入力を制限する
JDK 1.7.0以降の場合、JLayerを使用した入力制限が可能