0

私のアプリケーションには、一連のサブメニューを表示するJPopupMenuがあります。

private static JMenu createMenu(String title) {
    JMenu menu = new JMenu(title);
    menu.setDelay(2000);
    menu.add(new JMenuItem("123"));
    menu.add(new JMenuItem("234"));
    menu.add(new JMenuItem("345"));
    return menu;
}

public static void main(String[] args) {
    JFrame frame = new JFrame("Hello");
    final JButton button = new JButton("Test");
    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            JPopupMenu jpm = new JPopupMenu();
            jpm.add(createMenu("XXX"));
            jpm.add(createMenu("YYY"));
            jpm.add(createMenu("ZZZ"));
            jpm.show(button, 0, 0);
        } 
    });

    frame.add(button);

    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
}

このアプリケーションは通常、Windowsで実行されます。

最初に最初のXXXサブメニューにマウスオーバーします。時々、誤ってマウスをYYYの上に移動すると、最初のサブメニューがすぐに消えてしまいます。

Javadocを読むと、JMenu.setDelay(2000)を呼び出すと、JMenuのポップアップメニューが2秒待ってからポップアップすることが示唆されるはずです。ただし、ポップアップする前に次のメニューを2秒遅らせるだけのようです。

ポップダウンを遅らせる方法はありますか?

4

1 に答える 1

1

アップデート

ここに何か面白いものがあります。バグ#6563939からJMenuを非表示にする前に、遅延を尊重する必要があります。2007年からオープンしています。

この点で、Javadocは誤解を招く可能性があります。「サブメニューがポップアップまたはダウンする前に」と表示されます。「ポップダウン」は「非表示」と理解できますが、「サブメニューが親メニューの下に表示される」という意味があります。


また、これは使用しているL&Fに依存することを示唆しているようです。そのため、次のように要求またはヒントすることしかできないように見えます。

各ルックアンドフィール(L&F)は、遅延プロパティを監視するための独自のポリシーを決定する場合があります。ほとんどの場合、トップレベルのメニューやドラッグ中の遅延は観察されません。このメソッドはルックアンドフィールコードのプロパティであり、さまざまなUI実装の特異性を管理するために使用されます。

于 2011-03-09T02:38:13.197 に答える