当用户按下分号键时,我希望分号保持在同一行,但将光标向下移动。例如,
我想要什么
示例文字; < - 按下并输入分号
| < ---光标移到这里
我现在的代码,半冒号向下移动,光标放在它旁边,如下所示:
我有什么
示例文字
; | < - 光标和分号转到新行
谢谢。
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();
}
}
答案 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处理事件来完成)