java如何在不退出应用程序的情况下处理JFrame并将其重新创建为新的?
我有一个问题,我必须使用两个JFrame
,这样我们就可以忘记好的/坏的做法
现在,当我们越过这一点
我的两个
LoginFrame
MainFrame
我想从MainFrame
注销到LoginFrame
,反之亦然。这样做,我希望两个框架都能重新打开。
就像我们实例化它们一样
主机。阶级
//on signout button event
new LoginFrame().setVisible(true);
dispose(); //it will dispose this frame and destroy its UI components and free resources etc etc.
同样地
登录框架。阶级
//on signin button event
new MainFrame().setVisible(true);
dispose(); //it will dispose this frame and destroy its UI components and free resources etc etc.
现在,这很好,但问题是我在MainFrame
中有一个keyDispatchEvent
,它在我注销后执行了多次登录(而没有关闭应用程序)
我相信即使在处理之后,JFrame
它实际上也没有被处理。因此,当我键入任何快捷键时,以前处理的帧对象和MainFrame
的新对象都在调度它们的事件。我如何才能丢失(我的意思是真正地处置)所有以前的对象,从而只为当前对象触发此事件
主机。阶级
final static KeyboardFocusManager keyManager=KeyboardFocusManager.getCurrentKeyboardFocusManager();
keyManager.addKeyEventDispatcher(new KeyEventDispatcher()
{
@Override
public boolean dispatchKeyEvent(KeyEvent e)
{
// if key is alt+r
{
signout(); // getting called repeatedly on single key release
}
}
});
我不想使用相同的对象,因为它们将有以前的状态/信息/更改。只是想扔掉废弃的东西
此外,在这种情况下,我必须使用KeyboardManager
到DispatchKeyEvent
# 1 楼答案
我希望下面的代码符合您的要求。既然你没有发布minimal, reproducible example,我只能从你(糟糕的)问题描述和你对[your] way or the highway的坚持中猜出你想要什么
我的猜测是,您不断地将相同的
KeyEventDispatcher
添加到KeyboardFocusManager
中,并且每个被添加的都将执行。因此,如果将相同的KeyEventDispatcher
添加三次,它将执行三次。我假设您只想添加一次,因此在不再需要时需要删除它我还假设,在启动应用程序时,您希望首先显示
LoginFrame
。因此,我在下面的LoginFrame
类中添加了一个main
方法类
LoginFrame
类
MainFrame
注:
done
标志李>