62,615
社区成员
发帖
与我相关
我的任务
分享
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
public class MyFrame extends JFrame {
public MyFrame() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(new Dimension(400, 300));
setContentPane(new MyPanel());
}
public static void main(String... args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
new MyFrame().setVisible(true);
}
}
class MyPanel extends JPanel {
public MyPanel() {
super(new FlowLayout());
initDetector();
add(button);
add(new JButton("do nothing"));
JTextField textField = new JTextField();
textField.setColumns(10);
add(textField);
}
private void initDetector() {
button = new JButton("OK");
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke((char) KeyEvent.VK_ESCAPE), "close the outter window");
button.getActionMap().put("close the outter window", new AbstractAction() {
private static final long serialVersionUID = 1L;
public void actionPerformed(ActionEvent e) {
JComponent source = (JComponent) e.getSource();
JFrame frame = (JFrame) getMostOutterComponent(source);
frame.dispose();
}
});
}
private Component getMostOutterComponent(Component c) {
if(c.getParent() == null) {
return c;
}
return getMostOutterComponent(c.getParent());
}
private JButton button;
}