好像Frame如果不重写windowClosing会导致窗口无法关闭
那么为什么JFrame没有重写windowClosing依旧可以关闭窗口参考代码import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class JFrameDemo { public JFrameDemo() {
JFrame f = new JFrame();
Container contentPane = f.getContentPane();
contentPane.setLayout(new GridLayout(1, 2));
JButton b1 = new JButton("打开JFrame窗口");
JButton b2 = new JButton("打开Frame窗口");
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFrame f1 = new JFrame();
f1.setSize(new Dimension(400, 300));
f1.setVisible(true);
}
});
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Frame f2 = new Frame();
f2.setSize(new Dimension(400, 300));
f2.setVisible(true);
}
});
contentPane.add(b1);
contentPane.add(b2);
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} public static void main(String[] args) {
new JFrameDemo();
}
}
那么为什么JFrame没有重写windowClosing依旧可以关闭窗口参考代码import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class JFrameDemo { public JFrameDemo() {
JFrame f = new JFrame();
Container contentPane = f.getContentPane();
contentPane.setLayout(new GridLayout(1, 2));
JButton b1 = new JButton("打开JFrame窗口");
JButton b2 = new JButton("打开Frame窗口");
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFrame f1 = new JFrame();
f1.setSize(new Dimension(400, 300));
f1.setVisible(true);
}
});
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Frame f2 = new Frame();
f2.setSize(new Dimension(400, 300));
f2.setVisible(true);
}
});
contentPane.add(b1);
contentPane.add(b2);
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} public static void main(String[] args) {
new JFrameDemo();
}
}
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
你不是在这里加了处理吗?
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这个是f的,不是f1的b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFrame f1 = new JFrame();
f1.setSize(new Dimension(400, 300));
f1.setVisible(true);
}
});
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
内部类,有监听
原来JFrame有这个方法啊,它的初值是什么??
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class FrameDemo { public FrameDemo() {
Frame f = new Frame();
f.setLayout(new GridLayout(1, 2));
Button b1 = new Button("打开JFrame窗口");
Button b2 = new Button("打开Frame窗口");
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFrame f1 = new JFrame();
f1.setSize(new Dimension(400, 300));
f1.setVisible(true);
}
});
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Frame f2 = new Frame();
f2.setSize(new Dimension(400, 300));
f2.setVisible(true);
}
});
f.add(b1);
f.add(b2);
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} public static void main(String[] args) {
new FrameDemo();
}
}
这回总公平了吧!
JFrame确实可以自己关闭而不需要加windowListener,这是特地设计成这样的。
如果不希望JFrame关闭自己,要setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE),这样JFrame才会和Frame一样表现。