« 年齢ソート | トップページ | シェーマエディタの機能アップ »

2011年3月 6日 (日)

Mac の JPopupMenu の不具合の回避(2)

Mac の JPopupMenu の不具合の回避で,極くまれに右クリック後にフリーズしてしまうことがあった orz。AWTEventListener をつける方法に変更してみた。これでまたしばらく様子を見る。

ui/MyJPopupMenu.java

public class MyJPopupMenu extends JPopupMenu {

  private AWTEventListener listener;
  private Component invoker;
  private int x;
  private int y;

  public MyJPopupMenu() {
    listener = new EventListener();
  }

  @Override
  public void show(Component invoker, int x , int y) {
    // 他のアプリケーションからクリックされたとき
    com.apple.eawt.Application.getApplication().requestForeground(true);

    this.invoker = invoker;
    this.x = x;
    this.y = y;
    Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.MOUSE_EVENT_MASK);
  }

  // MOUSE_RELEASED を検出する Listener
  private class EventListener implements AWTEventListener {
    public void eventDispatched(AWTEvent event) {
      if (event.getID() == MouseEvent.MOUSE_RELEASED) {
        superShow();
      }
    }
  }

  public void superShow() {
    Toolkit.getDefaultToolkit().removeAWTEventListener(listener);
    super.show(invoker, x, y);
  }

« 年齢ソート | トップページ | シェーマエディタの機能アップ »

OpenDolphin」カテゴリの記事