【发布时间】:2012-12-10 19:13:38
【问题描述】:
有没有办法从一个充满文本的 jtextpane 中“提取”行数? 如果有,如果某些行是由于文本换行,它会起作用吗?
【问题讨论】:
标签: java swing jtextpane word-wrap
有没有办法从一个充满文本的 jtextpane 中“提取”行数? 如果有,如果某些行是由于文本换行,它会起作用吗?
【问题讨论】:
标签: java swing jtextpane word-wrap
您可以使用Utilities.getRowStart 来确定@987654323@ 的行的“开始”,从而得到lineCount。这也适用于换行时。
int totalCharacters = textPane.getText().length();
int lineCount = (totalCharacters == 0) ? 1 : 0;
try {
int offset = totalCharacters;
while (offset > 0) {
offset = Utilities.getRowStart(textPane, offset) - 1;
lineCount++;
}
} catch (BadLocationException e) {
e.printStackTrace();
}
【讨论】:
如果您将“行”定义为 JTextPane 文本中有多少个 \n 字符,那么您可以使用:
JTextPane p = yourJTextPane;
System.out.println(p.getText().split("\n").length);
【讨论】:
要跳转到选中的行,我使用了以下代码:
int rowSel = Integer.parseInt(tfGoLine.getText());
int rowGo = 0;
int lineCount = 0;
int totalCharacters = rowSel <= 1 ? 0 : text.getText().length();
try {
int last = -1;
for (int count = 0; count < totalCharacters; count++) {
int offset = Utilities.getRowStart(text, count);
if (last != offset) {
last = offset;
lineCount++;
rowGo = offset;
if (lineCount == rowSel) {
break;
}
}
}
} catch (BadLocationException e) {
}
text.getCaret().setDot(rowGo);
text.requestFocus();
【讨论】:
int rowCount =txtPane.getDocument().getDefaultRootElement().getElementCount();
【讨论】: