- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的屏幕如下:
public BillSummaryScreen() {
..........
ShortcutKeyUtils.createShortcutKey(this, KeyEvent.VK_ENTER, "enterShortcut", new EnterAction());
}
public static void createShortcutKey(JComponent panel, int keyEventCode, String actionShortcutName, AbstractAction action){
InputMap inputMap = panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(KeyStroke.getKeyStroke(keyEventCode, 0), actionShortcutName);
ActionMap actionMap = panel.getActionMap();
actionMap.put(actionShortcutName, action);
}
private class EnterAction extends AbstractAction{
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("EnterAction");
}
}
我想按“ENTER”键以便单击搜索按钮。 但是当我将注意力集中到一个组合框(通过鼠标)并按下 ENTER 时,该操作不起作用
最佳答案
只要您只对 ENTER 绑定(bind)感兴趣,您就可以考虑将搜索按钮定义为根 Pane 的默认按钮:这会将组合框中的 Enter 自动传递给按钮的操作。
JButton searchButton = new JButton(searchAction);
frame.getRootPane().setDefaultButton(searchButton);
虽然可以传递任意绑定(bind),但这有点困难,无论是从可用性角度来看(您是否真的希望两个操作都发生,即绑定(bind)到组件和窗口绑定(bind)中的操作?)和技术角度。为了解决后者,您基本上需要一个自定义组件来欺骗绑定(bind)机制,使其相信它对 keyStroke 不感兴趣,例如正如下面的 MultiplexingTextField 中所做的那样。
对 JComboBox 这样做有其自己的障碍:您必须实现一个使用此类自定义文本字段的自定义组合框编辑器。由于编辑器由 LAF 控制(并且几乎每个编辑器看起来都不同),因此每个 LAF 都需要一个自定义编辑器(检查源和 c&p :-)。
/**
* A JTextField that allows you to specify an array of KeyStrokes that
* will have their bindings processed regardless of whether or
* not they are registered on the JTextField itself.
*/
public static class MultiplexingTextField extends JTextField {
private KeyStroke[] strokes;
private List<KeyStroke> keys;
MultiplexingTextField(int cols, KeyStroke... strokes) {
super(cols);
this.keys = Arrays.asList(strokes);
}
@Override
protected boolean processKeyBinding(KeyStroke ks, KeyEvent e,
int condition, boolean pressed) {
boolean processed = super.processKeyBinding(ks, e, condition,
pressed);
if (processed && condition != JComponent.WHEN_IN_FOCUSED_WINDOW
&& keys.contains(ks)) {
// Returning false will allow further processing
// of the bindings, eg our parent Containers will get a
// crack at them.
return false;
}
return processed;
}
}
关于java - JComponent.WHEN_IN_FOCUSED_WINDOW 无法与 JCombobox 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19848557/
我在 JInternalFrame 中有一个组件,当在 JInternalFrame 的父子窗口中按下按键时,该组件需要执行操作。使用 InputMap/ActionMap 是理想的选择,但是组件的
我的屏幕如下: public BillSummaryScreen() { .......... ShortcutKeyUtils.createShortcutKey(this, KeyEv
我是一名优秀的程序员,十分优秀!