我使用简单的GUI构建简单的聊天应用程序,但是我在向“发送”按钮分配“输入”键时遇到问题。现在按Alt + Enter非常不实用。
public void buildInterface() {
//some other components
btnSend = new JButton("Send");
btnExit = new JButton("Exit");
btnSearch=new JButton("Search");
btnSend.setMnemonic(KeyEvent.VK_ENTER);
JPanel box=new JPanel();
add(box, BorderLayout.SOUTH);
box.add(tfInput);
box.add(btnSend);
box.add(btnExit);
box.add(btnSearch);
}
答案 0 :(得分:1)
当按钮聚焦时,在大多数外观下, Enter 将激活按钮。
但是,您可以指定一个按钮作为"默认"窗口的按钮,按下 Enter 键时将激活,只要聚焦的组件不消耗它。
答案 1 :(得分:1)
将以下代码添加到Util类
public static void bindKeyStroke(final JButton btn, String ks) {
final ActionListener[] alist = btn.getActionListeners();
if (alist.length != 0) {
AbstractAction action = new AbstractAction(btn.getText(), btn.getIcon()) {
@Override
public void actionPerformed(ActionEvent e) {
for (ActionListener al : alist) {
ActionEvent ae = new ActionEvent(e.getSource(), e.getID(), Action.ACCELERATOR_KEY);
al.actionPerformed(ae);
}
}
};
KeyStroke keyStroke = KeyStroke.getKeyStroke(ks);
btn.setAction(action);
btn.getActionMap().put(Action.ACCELERATOR_KEY, action);
btn.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, Action.ACCELERATOR_KEY);
}
}
转到框架,对话框或面板构造函数,并在initComponent();
之后添加Util.bindKeyStroke(<your button>, "alt enter");
修复双重操作,执行中
if (evt.getActionCommand().equals(Action.ACCELERATOR_KEY)) {
// Your send action here
}