2016-12-16 97 views
1

我對Java很陌生,但熟悉原生Android開發,所以xD支持我。我創建了一個創建JFrame的應用程序。然後我將closeOperation設置爲:setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);Java - 如何「取消隱藏」一個JFrame

它按預期執行,框架被隱藏,這就是我想要的(當我關閉時)。我需要應用程序繼續運行(只有一次實例),因爲我正在執行操作的後臺運行一個線程。

我在我在我的JFrame按鈕的ActionListener目前做到這一點:setVisible(false);

我的問題是,我怎麼能最大限度地發揮它的JFrame已隱藏後再次?當用戶點擊任務欄中最小化的應用程序時是否可以顯示框架?是否需要實現某種類型的偵聽器?

在此先感謝,任何意見可以理解

UPDATE

對於這個解決方案正確,你需要做下面的工作。另外看看XtremeBaumer的回答是否合理。

關於JFrame創建setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);。 當你想最小化應用程序(點擊可能)frame.setState(Frame.ICONIFIED);。 當你想再次最大化應用frame.setState(Frame.NORMAL);windowDeiconified事件。

最後一件事,如果您想在用戶點擊退出按鈕(紅色x)時將您的應用程序最小化,請將其添加到windowClosing事件frame.setState(Frame.ICONIFIED);

+0

通過創建此JFrame的實例,然後調用'setVisible(true)'方法? –

回答

2
this.addWindowListener(new WindowListener(){ 

     @Override 
     public void windowActivated(WindowEvent e) { 
     } 

     @Override 
     public void windowClosed(WindowEvent e) { 
     } 

     @Override 
     public void windowClosing(WindowEvent e) { 
      setState(Frame.ICONIFIED) 
     } 

     @Override 
     public void windowDeactivated(WindowEvent e) { 
     } 

     @Override 
     public void windowDeiconified(WindowEvent e) { 
      this.setVisible(true); 
      //this should be what you want 
     } 

     @Override 
     public void windowIconified(WindowEvent e) { 
     } 

     @Override 
     public void windowOpened(WindowEvent e) { 
     } 

    }); 

我希望這可以解決您的問題。將其添加到您的JFrame中

+0

謝謝,也許還將此添加到您的答案(當我實現此答案時工作) - http://stackoverflow.com/questions/3965336/how-to-minimize-a-jframe-window-from-java。否則'windowDeiconified'事件永遠不會被稱爲 – Lunchbox

+0

,所以我發現了這個問題,一旦你設置了可見(false)或隱藏()窗口,用戶就不能通過點擊圖標來顯示它,因爲沒有圖標。你是如何解決這個問題的? – XtremeBaumer

+0

創建JFrame時,請改爲執行此操作(我今天將編輯我的問題)。 'setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);'。然後,您需要使用'frame.setState(Frame.ICONIFIED);'和'frame.setState(Frame.NORMAL);'來自行處理JFrame的關閉。圖標化最小化和正常恢復。用戶不應該能夠關閉我的應用程序,這是不錯的,但有充分的理由。客戶訂單。 – Lunchbox