Swing/SliderMenuItem のバックアップ(No.9)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SliderMenuItem へ行く。
- category: swing folder: SliderMenuItem title: JPopupMenuに追加したJSliderの表示・非表示をチェックボックスで切り替える tags: [JPopupMenu, JMenu, JSlider, JCheckBox, JCheckBoxMenuItem, MouseWheelListener] author: aterai pubdate: 2021-09-20T08:26:03+09:00 description: JPopupMenuに追加したJSliderの表示・非表示などを同じくJPopupMenuに追加したJCheckBoxやJCheckBoxMenuItemを使用して切り替えます。 image: https://drive.google.com/uc?id=1uAnPEgCDZO7xZ812Tsh5v-cqu5miTVJv
Summary
JPopupMenuに追加したJSliderの表示・非表示などを同じくJPopupMenuに追加したJCheckBoxやJCheckBoxMenuItemを使用して切り替えます。
Screenshot

Advertisement
Source Code Examples
private static void addCheckBoxMenuItemAndSlider(JComponent popup) {
JMenuItem slider = makeBorderLayoutMenuItem();
slider.add(makeSlider());
JMenuItem mi = new JCheckBoxMenuItem("JCheckBoxMenuItem + JSlider");
mi.addActionListener(e -> {
AbstractButton b = (AbstractButton) e.getSource();
slider.setVisible(b.isSelected());
Container p = SwingUtilities.getAncestorOfClass(JPopupMenu.class, b);
if (p instanceof JPopupMenu) {
p.setVisible(true);
((JPopupMenu) p).pack();
}
});
popup.add(mi);
popup.add(slider);
}
View in GitHub: Java, KotlinExplanation
JCheckBox+JSlider+JMenuItem- テキストなどが空の
JMenuItemにBorderLayoutを設定してJCheckBoxと無効化したJSliderを追加し、JCheckBoxが選択されたらJSliderを有効化 JPopupMenu上でホイールを回転しても閉じないようMouseWheelListenerを追加してInputEvent#consume()でホイールイベントを消費JPopupMenu#addMouseWheelListener(InputEvent::consume);
JSliderにMouseWheelListenerを追加してホイールの回転で値を変更可能に設定し、InputEvent#consume()を実行して親コンポーネントにホイールイベントが伝わらないよう消費
- テキストなどが空の
JCheckBox+JSliderJCheckBoxを追加したJMenuItemを作成し、非表示化したJSliderと並べてJPopupMenuなどに追加JCheckBoxのクリックでJSliderの表示・非表示を切り替えるActionListenerを追加JSliderの表示で親JPopupMenuのサイズを拡大、非表示で縮小するためこのActionListenerでJPopupMenu#pack()を実行する必要があるJMenuにJSliderを追加している場合でもSwingUtilities.getAncestorOfClass(JPopupMenu.class, ...)で親JPopupMenuが取得可能
GTKLookAndFeelで使用する場合ノブ上に値を表示しないようUIManager.put("Slider.paintValue", Boolean.FALSE)を設定する必要がある
JCheckBoxMenuItem+JSlider- JCheckBoxMenuItemをクリックしてもJPopupMenuを閉じないように設定するのように
UIManager.put("CheckBoxMenuItem.doNotCloseOnMouseClick", true)などでクリックしても親JPopupMenuが閉じないよう設定したJCheckBoxMenuItemと、非表示化したJSliderと並べてJPopupMenuなどに追加 - 上記の
JCheckBoxと同様のActionListenerをJCheckBoxMenuItemに追加
- JCheckBoxMenuItemをクリックしてもJPopupMenuを閉じないように設定するのように
Reference
- java - Dynamic resizing of JMenu after adding items at runtime - Stack Overflow
- JCheckBoxMenuItemをクリックしてもJPopupMenuを閉じないように設定する
- JPopupMenuのレイアウトを変更して上部にメニューボタンを追加する
- JPopupMenuのMenuItemとしてJSpinnerを配置する