2010-03-01 48 views
1

我想通過單擊位於放置在我想要關閉的JFrame上的JPanel的按鈕來處理我的JFrame。通過點擊從內部JPanel來處理JFrame

我試圖在JFrame類上做一個靜態方法,但是當然我的IDE告訴我這不會發生。

任何想到解決方案的人?

謝謝!

回答

0

試試這個:

public class DisposeJFrame extends JFrame{ 
    JPanel panel = new JPanel(); 
    JButton button = new JButton("Dispose JFrame"); 

    public DisposeJFrame(){ 
     super(); 
     setTitle("Hi"); 
     panel.add(button); 
     add(panel); 
     pack(); 

     button.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       dispose(); 
      } 
     }); 
    } 

    public static void main(String args[]){ 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run(){ 
       DisposeJFrame jf = new DisposeJFrame(); 
        jf.setVisible(true); 
      } 
     }); 
    } 
} 
0

做這樣的事情:

JButton closeFrameButton = new JButton("Close"); 
closeFrameButton.addActionListener(new ActionListener() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     ((Window) getRootPane().getParent()).dispose(); 
    } 
}); 
+1

答案與工作代碼很不錯,當他們解釋爲什麼它的作品他們是更好的。 (歡迎來到Stack Overflowtoo btw) – indivisible

+0

調用[getTopLevelAncestor](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html#getTopLevelAncestor--)比假設JRootPane更安全窗戶的直接孩子。事實上,如果組件位於JInternalFrame中,則此代碼根本無法工作。 – VGR