Swing/SliderMenuItem のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SliderMenuItem へ行く。
- 1 (2021-09-20 (月) 08:35:40)
- 2 (2021-09-20 (月) 11:14:11)
- 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
概要
JPopupMenu
に追加したJSlider
の表示・非表示などを同じくJPopupMenu
に追加したJCheckBox
やJCheckBoxMenuItem
を使用して切り替えます。
Screenshot
Advertisement
サンプルコード
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, Kotlin解説
JCheckBox
+JSlider
+JMenuItem
- テキストなどが空の
JMenuItem
にBorderLayout
を設定してJCheckBox
と無効化したJSlider
を追加し、JCheckBox
が選択されたらJSlider
を有効化 JPopupMenu
上でホイールを回転しても閉じないようMouseWheelListener
を追加してInputEvent#consume()
でホイールイベントを消費JPopupMenu#addMouseWheelListener(InputEvent::consume);
JSlider
にMouseWheelListener
を追加してホイールの回転で値を変更可能に設定し、InputEvent#consume()
を実行して親コンポーネントにホイールイベントが伝わらないよう消費
- テキストなどが空の
JCheckBox
+JSlider
JCheckBox
を追加したJMenuItem
を作成し、非表示化したJSlider
と並べてJPopupMenu
などに追加JCheckBox
のクリックでJSlider
の表示・非表示を切り替えるActionListener
を追加JSlider
の表示で親JPopupMenu
のサイズを拡大、非表示で縮小するためこのActionListener
でJPopupMenu#pack()
を実行する必要があるJMenu
にJSlider
を追加している場合でもSwingUtilities.getAncestorOfClass(JPopupMenu.class, ...)
で親JPopupMenu
が取得可能
JCheckBoxMenuItem
+JSlider
- JCheckBoxMenuItemをクリックしてもJPopupMenuを閉じないように設定するのように
UIManager.put("CheckBoxMenuItem.doNotCloseOnMouseClick", true)
などでクリックしても親JPopupMenu
が閉じないよう設定したJCheckBoxMenuItem
と、非表示化したJSlider
と並べてJPopupMenu
などに追加 - 上記の
JCheckBox
と同様のActionListener
をJCheckBoxMenuItem
に追加
- JCheckBoxMenuItemをクリックしてもJPopupMenuを閉じないように設定するのように
参考リンク
- java - Dynamic resizing of JMenu after adding items at runtime - Stack Overflow
- JCheckBoxMenuItemをクリックしてもJPopupMenuを閉じないように設定する
- JPopupMenuのレイアウトを変更して上部にメニューボタンを追加する