JPopupMenuに追加したJSliderの表示・非表示をチェックボックスで切り替える
Total: 1351
, Today: 4
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
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
が取得可能
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を閉じないように設定するのように
参考リンク
- java - Dynamic resizing of JMenu after adding items at runtime - Stack Overflow
- JCheckBoxMenuItemをクリックしてもJPopupMenuを閉じないように設定する
- JPopupMenuのレイアウトを変更して上部にメニューボタンを追加する