我为 NetBeans IDE 开发了一个简单的插件。我对向导面板的 TopComponenet
上的默认按键事件有一点问题:
例如:
我有一个包含 3 个步骤的向导。在第二步中,我有一个 JTextField
,用户可以在其中输入一些值,然后在该文本字段下方出现一个 JList
。一切正常,直到用户从列表中选择某个值,然后按 ENTER 键,然后我的面板转到下一步 3。我附加一个关键监听器以列出如下内容:
list = new JList(new PackagesListModel());
list.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(java.awt.event.KeyEvent evt) {
int keyCode = evt.getKeyCode();
if(keyCode == KeyEvent.VK_ENTER){
JList list = (JList)evt.getSource();
Object selectedPackage = list.getSelectedValue();
typePackageField.setText((String)selectedPackage);
}
}
});
但此监听器可能是在向导上 TopComponenet
的默认监听器之后调用的。如何防止使用 ENTER 键将用户移动到下一步?
我不想执行此操作(当用户按 ENTER 后他们会转到下一步)。
更新:
转发给 Kraal 答案:
问题是我不知道在哪里可以找到 JButton Next(关闭监听器)。这听起来很奇怪,但我是怎么写的。我正在使用 Netbeans Plaform WizzardDescriptor 生成 Wizzard(包含 3 个步骤)。 WizzardDescriptor 来自包:
org.openide.WizardDescriptor; // Dialogs API
我向他提供了 3 个面板实例:WizardDescriptor.Panel 来自同一个包:
org.openide.WizardDescriptor // Dialogs API
看起来像:
panels = new ArrayList<>();
panels.add(new LayoutWizardPanel1(selectedLayout));
panels.add(new LayoutWizardPanel2(selectedLayout));
panels.add(new LayoutWizardPanel3(selectedLayout));
WizardDescriptor wiz = new WizardDescriptor(new WizardDescriptor.ArrayIterator<>(panels));
之后会生成如下内容:
在我的程序中我可以访问 WizardDescriptor
http://bits.netbeans.org/dev/javadoc/org-openide-dialogs/org/openide/WizardDescriptor.html
最佳答案
我不确定,但如果您知道是哪个 JComponent
导致此行为,请尝试以下操作:
suspectedComponent.getInputMap().put(KeyStroke.getKeyStrokeForEvent(KeyEvent.VK_ENTER),"none");
检查哪些击键绑定(bind)在 JComponent
上:
suspectedComponent.getInputMap().keys()
或者在父InputMap
中:
suspectedComponent.getInputMap().getParent().keys()
参见 docs for InputMap
了解详情。
关于java - 如何关闭 NetBeans 向导面板中的关键监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26693850/