Java Swing-如何将光标定位在PlainDocument中的JTextField内
我的JavaSwing应用程序有一个JText。我使用一个PlainDocument子类进行输入操作Java Swing-如何将光标定位在PlainDocument中的JTextField内,java,swing,jtextfield,Java,Swing,Jtextfield,我的JavaSwing应用程序有一个JText。我使用一个PlainDocument子类进行输入操作 public class MaskDecimalDocument extends PlainDocument { public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { //manipulation input code super
public class MaskDecimalDocument extends PlainDocument {
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
//manipulation input code
super.insertString(0, manipulatedText, a);
}
}
如果用户插入字符,insertString方法将处理该字符并将其插入文本中。接下来,光标将定位在文本的末尾。如何将光标定位在原始位置 > p>您可能需要考虑使用<代码>文档过滤器>代码>,因为它是处理<代码>文档< /代码>的最新API。这个概念是相同的,但类更易于重用,因为它可以添加到任何
文档中
有关更多信息,请阅读上的Swing教程部分
如何将光标定位在原始位置
创建自定义DocumentFilter
类时,需要传入使用Document
作为参数的文本字段,并将此文本字段保存为类的实例变量
然后,replaceSelection(…)
方法中的逻辑如下:
int caretPosition = textField.getCaretPosition();
super.replaceSelection(...);
textField.setCaretPosition( caretPosition );
注意:您可能需要将setCaretPosition(…)
方法放置在SwingUtilities.invokeLater()中>代码以确保代码在设置插入符号位置的默认处理之后执行。 ,您可能需要考虑使用<代码>文档过滤器> />代码>,因为它是处理<代码>文档< /代码>的最新API。这个概念是相同的,但类更易于重用,因为它可以添加到任何文档中
有关更多信息,请阅读上的Swing教程部分
如何将光标定位在原始位置
创建自定义DocumentFilter
类时,需要传入使用Document
作为参数的文本字段,并将此文本字段保存为类的实例变量
然后,replaceSelection(…)
方法中的逻辑如下:
int caretPosition = textField.getCaretPosition();
super.replaceSelection(...);
textField.setCaretPosition( caretPosition );
注意:您可能需要将setCaretPosition(…)
方法放置在SwingUtilities.invokeLater()
中,以确保在设置插入符号位置的默认处理之后执行代码。控制插入符号位置不是文档的工作。您应该忽略对插入符号位置的所有更改:
textField.setNavigationFilter(new NavigationFilter() {
@Override
public void setDot(FilterBypass bypass,
int position,
Position.Bias bias) {
// Deliberately empty
}
@Override
public void moveDot(FilterBypass bypass,
int position,
Position.Bias bias) {
// Deliberately empty
}
@Override
public int getNextVisualPositionFrom(JTextComponent component,
int position,
Position.Bias bias,
int direction,
Position.Bias[] newBias) {
return position;
}
});
控制插入符号位置不是文档的工作。您应该忽略对插入符号位置的所有更改:
textField.setNavigationFilter(new NavigationFilter() {
@Override
public void setDot(FilterBypass bypass,
int position,
Position.Bias bias) {
// Deliberately empty
}
@Override
public void moveDot(FilterBypass bypass,
int position,
Position.Bias bias) {
// Deliberately empty
}
@Override
public int getNextVisualPositionFrom(JTextComponent component,
int position,
Position.Bias bias,
int direction,
Position.Bias[] newBias) {
return position;
}
});