Swing/MenuDelayBeforePopedUp のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/MenuDelayBeforePopedUp へ行く。
- 1 (2023-07-31 (月) 01:53:18)
- category: swing folder: MenuDelayBeforePopedUp title: JMenuからJPopupMenuが表示されるまでの遅延時間を設定する tags: [JMenu, JPopupMenu] author: aterai pubdate: 2023-07-31T01:52:11+09:00 description: JMenuがサブメニューの場合、JPopupMenuが表示されるまでの遅延時間を設定します。 image: https://drive.google.com/uc?id=1M5LdPYH6ASqoI0ZrMN3X_RMQDKwy8_lB
概要
JMenuがサブメニューの場合、JPopupMenuが表示されるまでの遅延時間を設定します。
Screenshot
Advertisement
サンプルコード
JPopupMenu popup = new JPopupMenu();
JMenu sub0 = new JMenu("JMenu(Default)");
sub0.add("JMenuItem:0");
sub0.add("JMenuItem:1");
popup.add(sub0);
JMenu sub1 = new JMenu("JMenu(0..2000)");
sub1.setDelay(2000);
sub1.add("JMenuItem:2");
sub1.add("JMenuItem:3");
popup.add(sub1);
SpinnerNumberModel model = new SpinnerNumberModel(2000, 0, 2000, 100);
JSpinner spinner = new JSpinner(model);
model.addChangeListener(e -> sub1.setDelay(model.getNumber().intValue()));
setComponentPopupMenu(popup);
View in GitHub: Java, Kotlin解説
JMenu#setDelay(...)
メソッドでJMenu
にそのJPopupMenu
が表示されるまでの遅延時間をミリ秒単位で設定可能- JMenu#getDelay() (Java Platform SE 8)
- ドキュメントには「
delay
のデフォルトは0です。」と記述されているが、実際はBasicMenuUI#installDefaults()
で200
ミリ秒が直接設定されているUIManager
などを使用せずに直接設定されているためLookAndFeel
を変更するとJMenu#setDelay(...)
で設定した値がすべて200
ミリ秒に初期化されてしまうNimbusLookAndFeel
はSynthStyle#getInt(SynthContext, "Menu.delay", 200)
などで任意の値で初期化可能
- ドキュメントには「サブメニューを表示または非表示にするまでの、推奨される遅延時間をミリ秒単位で返します。」と記述されているが、「非表示」化にこの遅延時間を使用する
LookAndFeel
は存在しない? JMenu
がJMenuBar
に直接の子として配置されたトップレベル・メニューの場合(JMenu#isTopLevelMenu()==true`)や、ドラッグ中はこの設定は無視される- 「ドラッグ中は無視」: たとえば
JMenu(0)
のJPopupMenu
が表示されている状態でマウスをドラッグして直下のJMenu(2000)
に入る場合、この2000
ミリ秒の遅延時間は無視されてJMenu(2000)
のJPopupMenu
に直ちに切り替わる
- 「ドラッグ中は無視」: たとえば