Shift + Enter,与Java中
在同一组件进入了我的程序兴田SHIFT + ENTER键确实在文本区域一个新的生产线,但是当y删除的既定行为ENTER键程序崩溃,我可以这样做吗?,添加功能为SHIFT + ENTER键并删除Enter键的标准行为。 我下面的代码是,对于输入的删除行为的关键:Shift + Enter,与Java中
public void removeEnterBehavior(){
KeyStroke enter = KeyStroke.getKeyStroke("ENTER");
InputMap inputMap = messageTextArea.getInputMap();
inputMap.put(enter, "none");
}
为了与SHIFT + 输入键的新生产线,我的代码是:
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER && (e.getModifiers() & InputEvent.SHIFT_MASK) != 0){
addNewLine();
}
}
另外,ENTER键必须调用keyPressed方法
我认为你的问题类似于keyEventIssue with keyPressed
您应该使用keyReleased
而不是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
被使用,所以Keybinding
被添加为在版本的关键,虽然你可以使用false
当键被按下时,会发生相同的结果。另一个参数用于当SHIFT已关闭。
还可除去ENTER你应该这样做的键按下:我用false
这意味着键绑定
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false);
InputMap inputMap = jta.getInputMap();
inputMap.put(enter, "none");
注意放置的时候关键是按下。
下面是一个例子:
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);
}
});
}
这里是我用于去除deafult JTable's行导航,关于作品的代码输入和移位输入
ActionMap am = table.getActionMap();
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "Enter pressed");
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.SHIFT_DOWN_MASK, false), "Shift+Enter pressed");
am.put("Enter pressed",null);
am.put("Shift+Enter pressed", null);
即空可以被任何你需要的自定义动作(例如AbstractAction)所取代。在我的情况下,我使用了我自定义的JTable的构造函数中的一个自定义接口参数的方法。
你修复它,问题是我没有把方法放在事件中:/,谢谢你的回答 – user1977204