我正在做一个应用程序,它必须通过键盘读取一些字符并解释它们。
为了捕获键,我打开了一个 JDialog 并设置了一个 KeyEventDispatcher,这样我就可以在 dispatchKeyEvent 方法中捕获字符。在 JDialog 中,有一个按钮可以删除 KeyEventDispatcher 并处理 JDialog。
它有两个问题:
- 第一次打开 JDialog,就像没有设置 KeyEventDispatcher
- 当我关闭并打开这个 JDialog 时,KeyEventDispatchers 正在累积(第一次打开,没有运行;第二次打开,有一个正在运行,第 3 次打开,有 2 个正在运行,...)
似乎 KeyEventDispacthers 是在 JDialog 关闭但未删除时设置的,而不是在 JDialog 打开时设置并在关闭时删除。
有人可以帮助我了解发生了什么以及我该如何解决?
这是 JDialog 类的简化版本(只有关键捕获部分):
public class SequenceDialog {
private JDialog dialog;
private JButton finishButton;
private DialogKeyEventDispatcher keyEventDispatcher;
public SequenceDialog() {
initializeDialog();
}
private void initializeDialog() {
dialog = new JDialog();
finishButton = new JButton("Finish");
finishButton.addActionListener(new FinishButtonListener());
dialog.setModalityType(ModalityType.APPLICATION_MODAL);
dialog.add(finishButton);
setKeyListener();
dialog.setVisible(true);
dialog.pack();
}
/** Adds the KeyEventDispacther */ …Run Code Online (Sandbox Code Playgroud)