gpt4 book ai didi

java - 使用 Jpanel 或 JFrame 或 Dialog 的退出按钮

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:59:19 24 4
gpt4 key购买 nike

我正在创建一个应用程序,其中任何打开的 JpanelJFrameDialog 都应在点击 Escape 时关闭> 键盘的按钮。

如果我打开任何面板并直接点击 Escape 按钮,它已成功关闭,没有任何问题..但是当我在 JPanel 或 JFrame 或 Dialog 中执行某些操作后尝试使用 Escape 键关闭它时,它无法关闭.

如果我做错了什么,请帮助我

提前致谢...

我的方法是

public static void addKeyBinding(JComponent c, final Object promptControl) {
debugLogger.debug("Start Escape Key Binding ");

Action escape = new AbstractAction() {

{
putValue(NAME, "escape");
}

public void actionPerformed(ActionEvent e) {
try {
JComponent source = (JComponent) e.getSource();
Window window = SwingUtilities.getWindowAncestor(source);
window.dispose();
Dialog dialog = (Dialog) source.getFocusCycleRootAncestor();
dialog.dispose();
debugLogger.debug("source = " + source.getClass().getName()
+ "\n"
+ "source.focusCycleRootAncestor = "
+ source.getFocusCycleRootAncestor().getClass().getName());
} catch (Exception ex) {
errorLogger.error("Exception caught while closing the window." + x.toString());
}
}
};
Object name = escape.getValue(Action.NAME);
c.getInputMap().put(KeyStroke.getKeyStroke("ESCAPE"), name);
c.getActionMap().put(name, escape);
debugLogger.debug("End Escape Key Binding ");
}

最佳答案

1) 使用CardLayout而不是创建一堆 Top-Level Containers在运行时

2) 通过删除其内容重新使用顶级容器,因为这些容器是presents in the memory

3) 如果你要重新使用 JDialogs那么您只需调用 setVisible(true/fasle),最好将可见性包装到 invokeLater() 以将此事件添加到 EDT

编辑

window/dialog.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke("ESC"), "myAction");
window/dialog.getRootPane().getActionMap().put("myAction", new AbstractAction() {...});

关于java - 使用 Jpanel 或 JFrame 或 Dialog 的退出按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9060953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com