2013-01-14 36 views
2

在同一组件进入了我的程序兴田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方法

回答

1

我认为你的问题类似于keyEventIssue with keyPressed

您应该使用keyReleased而不是keyPressed来避免输入行为。

请检查我的答案在上面的链接,让我知道,如果它不能帮助,或者如果你的问题是不同的

+0

你修复它,问题是我没有把方法放在事件中:/,谢谢你的回答 – user1977204

2

你为什么混合KeyBindingKeyListener

不要使用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); 
      } 
     }); 
    } 
0

这里是我用于去除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的构造函数中的一个自定义接口参数的方法。

相关问题