• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JPopupMenuがキャンセルされてしまいます)

JPopupMenuがキャンセルされてしまう問題の解決方法

このQ&Aのポイント
  • JFrameとJDialog(モードレス)の組み合わせで、JPopupMenuが閉じてしまう問題が発生しています。
  • JDialogにフォーカスが移ると、JPopupMenuが自動的に閉じられてしまいます。
  • この問題を回避するためには、JDialogの可視性が変更された際にJPopupMenuを閉じる処理を追加する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

Java7 on Windows7 で試しましたが、この環境では消えません。 public class Test{ public static void main(String args[]) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(100, 100); frame.getContentPane().addMouseListener( new MouseListener() { @Override public void mouseReleased(MouseEvent e) { mousePopup(e); } @Override public void mousePressed(MouseEvent e) { mousePopup(e); } @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } private void mousePopup(MouseEvent e) { if (e.isPopupTrigger()) { // ポップアップメニューを表示する JComponent c = (JComponent)e.getSource(); showPopup(c, e.getX(), e.getY()); e.consume(); } } private void showPopup(JComponent c, int x, int y) { JPopupMenu pmenu = new JPopupMenu("ポップアップメニューのテスト"); //環境によってはメニューに表示されるらしい pmenu.add("メニュー1"); pmenu.add("メニュー2"); pmenu.add("メニュー3"); pmenu.show(c, x, y); // ポップアップメニューの表示 } }); frame.setVisible(true); JDialog dialog = new JDialog(frame,"jframe",true); dialog.setSize(50, 100); JTextArea area = new JTextArea(); area.setText("Text Area"); dialog.add(area); try{ //3秒後にダイアログ表示 Thread.sleep(3000); dialog.setVisible(true); }catch(InterruptedException e){ e.printStackTrace(); } } }

参考URL:
http://www.ne.jp/asahi/hishidama/home/tech/java/swing/JPopupMenu.html
django13
質問者

お礼

教えて頂いたサンプルと自分のソースを見比べてみるとダイアログの所有者を指定しているかどうかの違いがあったので、所有者を明確に指定するようにしたらメニューも閉じなくなりました。 ありがとうございます。

関連するQ&A