2013-05-06 2 views
1

내 응용 프로그램에 jframe 숨김이 있지만 닫을 때 표시되지만 도크 아이콘을 클릭하면 표시됩니다. to setVisible (true); 도크 아이콘에 액션 리스너를 추가하려면 어떻게해야합니까? 내가osx의 java dock 아이콘에 리스너를 추가하는 방법

Image im = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("SLogo.png")); 
final TrayIcon tri = new TrayIcon(im); 
tri.addActionListener(this); 

@Override 
public void actionPerformed(ActionEvent ae) { 
    this.setVisible(true); 
    System.out.print("ok"); 

} 

하지만 트리거되지, 또한이 방법은 윈도우 시스템에서 응용 프로그램에 영향을 미칠 것입니다 시도?

답변

1

AppForegroundListener 및/또는 AppReOpenedListener을 사용해야합니다. 이 예를 참조하십시오

public static void main(String[] args) 
{ 
    final JFrame frame = new JFrame(); 

    Application app = Application.getApplication(); 
    app.addAppEventListener(new AppForegroundListener() { 

     @Override 
     public void appMovedToBackground(AppForegroundEvent arg0) 
     { 
      System.out.println("appMovedToBackground"); 
     } 

     @Override 
     public void appRaisedToForeground(AppForegroundEvent arg0) 
     { 
      System.out.println("appRaisedToForeground"); 
      frame.setVisible(true); 
     } 

    }); 

    app.addAppEventListener(new AppReOpenedListener() { 
     @Override 
     public void appReOpened(AppReOpenedEvent arg0) 
     { 
      System.out.println("app reoponed"); 
      frame.setVisible(true); 
     } 
    }); 

    frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
    frame.setSize(200, 200); 
    frame.setVisible(true); 
} 

Windows에서 개발하는 경우, 당신은 맥/자바 클래스의 스텁을 포함해야합니다 그렇지 않으면 당신은 컴파일러 오류를 얻을 수 있습니다. here을 참조하십시오.

Mac에서 개발하는 경우 Windows에서 실행할 때 코드가 실행되지 않는지 확인하십시오.

+0

다른 응용 프로그램에 초점을 맞춘 경우에만 작동합니다. 해당 아이콘을 클릭하지 않은 상태에서 클릭하십시오. – Dima

+1

@DimaGoltsman 수정 된 답변보기. 'AppReOpenedListener'가 필요합니다. – whiskeyspider

+0

그랬어, 고맙습니다. – Dima

관련 문제