按下分号时将光标放在下一行

时间:2014-07-11 15:25:25

标签: java swing key-bindings jtextpane

当用户按下分号键时,我希望分号保持在同一行,但将光标向下移动。例如,

我想要什么

  

示例文字; < - 按下并输入分号

     

| < ---光标移到这里

我现在的代码,半冒号向下移动,光标放在它旁边,如下所示:

我有什么

  

示例文字

     

; | < - 光标和分号转到新行

谢谢。

SSCCE

import java.awt.Font;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.KeyStroke;
import javax.swing.WindowConstants;

public class Example {

private final JFrame frame = new JFrame();
private final JTextPane editor = new JTextPane();

public Example() {
    frameStuff();
    newLineOnSemiColonPress();
}

private void newLineOnSemiColonPress() {
    InputMap input = editor.getInputMap();
    String INSERT_BREAK = "insert-break";
    KeyStroke semi = KeyStroke.getKeyStroke("SEMICOLON");
    input.put(semi, INSERT_BREAK);
}

private void frameStuff() {
    editor.setFont(new Font("Arial", 0, 13));
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    frame.setSize(new Dimension(500, 400));
    frame.getContentPane().add(editor);
    frame.setVisible(true);
}

public static void main(String[] args) {
    new Example();
}
}

2 个答案:

答案 0 :(得分:2)

您只需要在释放分号键时绑定添加中断,而不是在第一次按下时添加中断:

private void newLineOnSemiColonPress() {
    InputMap input = editor.getInputMap();
    String INSERT_BREAK = "insert-break";
    KeyStroke semi = KeyStroke.getKeyStroke("released SEMICOLON");
    input.put(semi, INSERT_BREAK);
}

如果您尚未阅读,那么有一个很好的tutorial here,其中包含有关如何使用键绑定的更多信息。

答案 1 :(得分:1)

我对您的代码或Java不太熟悉,但问题是您的处理顺序错误。 插入分号后插入换行符,或者只需向右移动光标即可进行临时修复。

也许是这样的:

private void newLineOnSemiColonPress() {
    InputMap input = editor.getInputMap();
    String INSERT_BREAK = "insert-break";
    KeyStroke semi = KeyStroke.getKeyStroke("SEMICOLON");
    input.put(semi, INSERT_RIGHT_ARROW);
    input.put(semi, INSERT_BREAK);
}

或返回代码并确保在调用newLineOnSemicolonPress之前处理字符插入将对您有用。 (正如所指出的,这可以通过使用on_key_release处理事件来完成)