在我的程序中,hte SHIFT+ENTER 键在文本区域中换行,但是当 y 删除 ENTER 的既定行为时> 键程序崩溃,我可以这样做吗?,添加 SHIFT+ENTER 键的功能并删除 Enter 键的标准行为。 我的以下代码是针对 Enter 键的删除行为:
public void removeEnterBehavior(){
KeyStroke enter = KeyStroke.getKeyStroke("ENTER");
InputMap inputMap = messageTextArea.getInputMap();
inputMap.put(enter, "none");
}
对于使用 SHIFT+Enter 键的新行,我的代码是:
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER && (e.getModifiers() & InputEvent.SHIFT_MASK) != 0){
addNewLine();
}
}
此外,ENTER 键必须调用 keyPressed 方法中的方法
最佳答案
为什么要混合使用KeyBinding
和KeyListener
?
不要将 KeyListener
/KeyAdapter
与 Swing 一起使用。始终使用KeyBindings
您应该执行类似的操作来监听 SHIFT+ENTER (可以在按键释放或按键按下时):
jta.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.SHIFT_DOWN_MASK, true), "Shift+Enter released");
jta.getActionMap().put("Shift+Enter released", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ae) {
System.out.println("Shift+Enter released");
}
});
重要的部分是:
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.SHIFT_DOWN_MASK, true)
注意最后 2 个参数。使用 true
以便在释放 key 时添加 Keybinding
,尽管您可以在释放 key 时使用 false
按下 键,会出现相同的结果。另一个参数是 SHIFT 按下时的参数。
要删除ENTER,您应该在按下的键上执行此操作:
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false);
InputMap inputMap = jta.getInputMap();
inputMap.put(enter, "none");
请注意,我使用false
,这意味着按下按键时会放置键绑定(bind)。
这是一个例子:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JTextArea jta = new JTextArea(20, 20);
//remove enter pressed
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false);
InputMap inputMap = jta.getInputMap();
inputMap.put(enter, "none");
//add shift+enter keybinding can be on pressed or released i.e false or true
jta.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.SHIFT_DOWN_MASK, true), "Shift+Enter released");
jta.getActionMap().put("Shift+Enter released", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ae) {
System.out.println("Shift+Enter released");
}
});
frame.add(jta);
frame.pack();
frame.setVisible(true);
}
});
}
关于java - SHIFT + ENTER 和 Java 中同一组件中的 ENTER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14318191/