Java 为什么需要偏移值
因此,我的代码正在工作,可能不是最漂亮或最有效的,但现在它完成了工作。然而,我的问题是,为什么我需要某些偏移值,比如我的一些函数的位置有+1,而行号有+2。这些神奇的数字有点让人困惑,因为它们使程序按需工作,但为什么它们要这样做呢?我把这些+1加到总数中,我理解了它们为什么起作用,但仍然没有对这些神奇数字的具体解释。如果你能告诉我它们的意义那就太好了。下面是一些代码供参考Java 为什么需要偏移值,java,swing,jtextpane,Java,Swing,Jtextpane,因此,我的代码正在工作,可能不是最漂亮或最有效的,但现在它完成了工作。然而,我的问题是,为什么我需要某些偏移值,比如我的一些函数的位置有+1,而行号有+2。这些神奇的数字有点让人困惑,因为它们使程序按需工作,但为什么它们要这样做呢?我把这些+1加到总数中,我理解了它们为什么起作用,但仍然没有对这些神奇数字的具体解释。如果你能告诉我它们的意义那就太好了。下面是一些代码供参考 private String getLineNumbersText() { int counter = 0;
private String getLineNumbersText()
{
int counter = 0;
int caretPosition = textArea.getDocument().getLength();
Element root = textArea.getDocument().getDefaultRootElement();
StringBuilder lineNumbersTextBuilder = new StringBuilder();
lineNumbersTextBuilder.append("1").append(System.lineSeparator());
for (int elementIndex = 2; elementIndex < root.getElementIndex(caretPosition) +2;
elementIndex++)
{
lineNumbersTextBuilder.append(elementIndex).append(System.lineSeparator());
}
return lineNumbersTextBuilder.toString();
}
}
public void goToLine(JTextPane text)
{
String lineToSearch = JOptionPane.showInputDialog(null, "Line Number: ");
int total = 0;
int lineNum = 0;
for (String line : text.getText().split("\n"))
{
lineNum +=1;
String lineNumStr = lineNum + "";
if (lineNumStr.compareTo(lineToSearch) == 0)
{
if( line == null)
{
text.setCaretPosition(total);
}
text.setCaretPosition(total);
break;
}
total += line.length() + 1;
}
}
public void search(JTextPane text)
{
Document myText = text.getDocument();
final StyleContext cont = StyleContext.getDefaultStyleContext();
final AttributeSet reset = cont.addAttribute(cont.getEmptySet(),
StyleConstants.Foreground,Color.GREEN);
String wordToSearch = JOptionPane.showInputDialog(null, "Word to search for:");
Highlighter highlighter = text.getHighlighter();
highlighter.removeAllHighlights();
HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.pink);
int m;
int total = 0;
for (String line : text.getText().split("\n"))
{
m = line.indexOf(wordToSearch);
if(m == -1)
{
if(isUnix())
{
total += line.length() + 1;
}
else if(isWindows())
{
total += line.length();
}
else if(isMac())
{
total += line.length() + 1;
}
else
{
total += line.length() + 1;
}
continue;
}
try
{
highlighter.addHighlight(total + m, total + m + wordToSearch.length(), painter);
}catch(BadLocationException ex)
{}
while(true)
{
m = line.indexOf(wordToSearch, m + 1);
if (m == -1)
{
break;
}
try{
highlighter.addHighlight(total + m, total + m + wordToSearch.length(), painter);
}catch(BadLocationException e)
{
}
}
if(isUnix())
{
total += line.length() + 1;
}
else if(isWindows())
{
total += line.length();
}
else if(isMac())
{
total += line.length() + 1;
}
else
{
total += line.length() + 1;
}
continue;
}
try
{
myText.insertString(total,"", reset);
}
catch(BadLocationException ex)
{
}
}
私有字符串GetLineNumberText()
{
int计数器=0;
int-caretPosition=textArea.getDocument().getLength();
元素根=textArea.getDocument().getDefaultRootElement();
StringBuilder lineNumbersTextBuilder=新StringBuilder();
lineNumbersTextBuilder.append(“1”).append(System.lineSeparator());
for(int-elementIndex=2;elementIndex
代码似乎有点复杂,所以我不确定它到底是做什么的
但是,这些链接可能有助于简化代码:
textPane.getDocument().getText(…)
实用程序
类。像getRowStart(…)和getRowEnd(…)这样的方法将使提取文本更容易,因为一旦知道开始/结束偏移量,就可以使用getText(…)方法和这些参数当然,行号基本上显示在文本窗格的左侧。搜索突出显示要搜索的单词,go-to行转到指定行。如果(line==null)语句应该做什么?它似乎设置了一个插入符号的位置,它将被设置为同一个东西是的,我认为这可能有点多余,当我试图使一些工作