的addActionListener方法關閉JFame我如何可以調用JFrame的setVisible(false)
一個JButton的addActionListener
函數中(如下圖所示):從一個JButton
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
//here
}
});
的addActionListener方法關閉JFame我如何可以調用JFrame的setVisible(false)
一個JButton的addActionListener
函數中(如下圖所示):從一個JButton
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
//here
}
});
假設你有一個變量聲明如下:
JFrame frame;
你只需要撥打:
frame.setVisible(false);
否則,如果你在一個擴展類JFrame
,你必須:
NameOfClass.this.setVisible(false);
甚至更好,使用setVisible(false)
,你CA dispose()
它。
您只需要在定義按鈕動作的地方可以訪問的框架。您可以通過使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()
真的試圖關閉應用程序。
謝謝,我的情況是我有一個擴展JFrame的類,所以_Dan_有正確的答案(+1) – Adil
1)看看'JFrame.DISPOSE_ON_CLOSE' 2)請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/a/9554657/418556) –