2012-11-08 77 views
0

的addActionListener方法關閉JFame我如何可以調用JFrame的setVisible(false)一個JButton的addActionListener函數中(如下圖所示):從一個JButton

jButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
    //here   
    } 
}); 
+0

1)看看'JFrame.DISPOSE_ON_CLOSE' 2)請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/a/9554657/418556) –

回答

2

假設你有一個變量聲明如下:

JFrame frame; 

你只需要撥打:

frame.setVisible(false); 

否則,如果你在一個擴展類JFrame,你必須:

NameOfClass.this.setVisible(false); 

甚至更​​好,使用setVisible(false),你CA dispose()它。

2

您只需要在定義按鈕動作的地方可以訪問的框架。您可以通過使JFrame最終做到這一點,或者通過它在Action定義的類中的字段:

import java.awt.event.*; 
import javax.swing.*; 

public class CloseFrame extends JPanel{ 

    public CloseFrame(final JFrame frame){ 

     JButton button = new JButton("Hide Screen"); 
     button.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       //What you asked for: 
       frame.setVisible(false); 
       // What you should use instead of the above: 
       //frame.dispose(); 
      }}); 

     add(button); 
    } 


    public static void main(String[] args){ 
     final JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new CloseFrame(frame)); 
     frame.pack(); 
     frame.setSize(400, 300); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 

編輯

同時請注意,你應該,如果你使用JFrame.dispose()真的試圖關閉應用程序。

+0

謝謝,我的情況是我有一個擴展JFrame的類,所以_Dan_有正確的答案(+1) – Adil