JTextArea new line on shift + enter

后端 未结 3 1714
南笙
南笙 2021-02-08 23:31

I\'ve added a keylistener to my JTextArea field, but it doesn\'t behave as I expected.

inputTextArea.addKeyListener(new KeyAdapter() {
public void keyPressed(Key         


        
3条回答
  •  孤街浪徒
    2021-02-09 00:01

    Instead of doing the actions immediately on receiving the event, sequence them for later by posting them using SwingUtilities.invokeLater(). The code should look like:

    if(k.isShiftDown()) {
       SwingUtilities.invokeLater(new Runnable() {
          public void run() {
             inputTextArea.append(" \n");
          }
       });
    } else {
       SwingUtilities.invokeLater(new Runnable() {
          public void run() {
              //rest of the else body here
          }
       });
    
    }
    

    In my opinion, the problems seen here are because application-defined actions and internal actions are not being properly sequenced, leading to repaints happening before the text has been modified.

提交回复
热议问题