2015-04-20 91 views
0

我已經從oracle-example複製了大部分代碼,所以我認爲至少我沒有添加的代碼應該是正確的,不想改變這一點。但是在Oracle的代碼,我無法實現該行正常關閉我的JFrame:frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));在actionPerformed方法中關閉JFrame(JFrame是私有靜態void createGUI())

private static void createGUI() { 
     JFrame frame = new JFrame("NameChooser"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     ... 
} 

public static void main(String[] args) { 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createGUI(); 
     } 
    }); 
} 

public void actionPerformed(ActionEvent e) {   
    if (e.getSource()==skipButton){ 
     frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING)); WindowEvent.WINDOW_CLOSING)); // does not work ofc 
    } 
} 

如何關閉我的JFrame在actionPerformed法不破壞打開JFrame的這種正確的方法?

或者這個oracle代碼只適用於例子而不適用於真正的應用程序?

+0

'#的JFrame ... dispose'我 – MadProgrammer

+0

無法訪問我的JFrame(框架),也不JFrame的例子在我的actionPerformed法 – Cthaeh

+0

我無法訪問我的JFrame(框架)的實例,也沒有JFrame在我的actionPerformed方法--->然後不擴展JFrame,爲這個對象創建一個局部變量,順便說一句,這是可能的,但局部變量是正確的方式 – mKorbel

回答

0

你應該frame實例字段是這樣的:

private static JFrame frame; 

private static void createGUI() 
{ 
    frame = new JFrame("NameChooser"); 
    ... 
} 
+0

爲什麼我應該使用.equals而不是==?但無論如何,你的想法看起來很乾淨,所以我會去那,謝謝你! – Cthaeh

+0

好的,所以在這種情況下,您可以使用==抱歉誤導。 –