2011-03-09 7 views
0

をポップダウン、私はサブメニューのセットを表示するのPopupMenuを持っている:JMenuのsetDelayは()私のアプリケーションでは遅延

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秒前に次のメニューを遅らせるだけのようです。

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

答えて

1

更新

ここで何か面白いものです。 Bug #6563939 Delay should be respected before hiding a JMenu, open since 2007

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


またseems to suggest that this depends on the L&F you're using、それはあなただけで要求したり暗示することができます何かのような多くのように見えるので:

それぞれが見て、感じ(L & F) を決定することができる、それがために独自のポリシーです 遅延プロパティを確認してください。ほとんどの場合、 の最上位レベルのメニューまたはドラッグ中に遅延が観測されません。このメソッド は、ルックアンドフィール コードのプロパティであり、さまざまなUI 実装の の特権を管理するために使用されます。

+0

@Huey私はこの問題を指摘しているようなバグへのリンクを、2007年から開いています –

+0

本当に遅延が望めば、JMenuを拡張して何かをすることができます私はJMenuのソースを見ていましたが、それを行うための単純な方法ではないようです –

関連する問題