+-

我试图使用 java模拟调试光标的移动.我有问题将JScrollPane的可视区域放到正确的位置.
这是我想要拍摄的照片:
我只想滚动我想跳的线是不可见的.计算是否有帮助可以通过使用CodeDrowingPanel.NUMBER_OF_LINES和CodeDrowingPanel.FONT_SIZE完成,使用这些常量在面板上绘制线条.
如果我必须跳,我必须跳的线应该在底部.
我必须记住,可见区域取决于屏幕分辨率.应用程序已最大化,无法调整大小.
编辑:
public void setCursorToLine(int line, JScrollPane codeArea)
{
if(line*CodeDrowingPanel.FONT_SIZE > this.getHeight()+43)
this.cursorPosition = this.getHeight()+43;
else
this.cursorPosition = line * CodeDrowingPanel.FONT_SIZE;
JViewport viewPort = (JViewport) SwingUtilities.getAncestorOfClass(JViewport.class, codeArea);
if (viewPort != null)
{
Rectangle view = viewPort.getViewRect();
view.y += line - previousLine;
codeArea.scrollRectToVisible(view);
}
this.repaint();
}
这就是我现在尝试修改的方法.但它不起作用.我尝试从第一条评论中跟随你的第二个例子.我不知道如何使用第二条评论中的方法.
最佳答案
我不认为行号应该是文本的一部分.例如,您有一个水平滚动条.如果向右滚动,则会丢失行号.
相反,您应该使用行标题来显示行号.
请参阅Text Component Line Number.它包含一个为您自定义绘制行号的类.您可以使用将此组件添加到行标题.
该类中的绘制代码将突出显示当前行号.如果要添加箭头,则需要修改绘制代码.在paintComponent(…)方法中,您可以添加以下内容:
g.drawString(lineNumber, x, y);
// Code to paint an arrow
if (isCurrentLine(rowStartOffset))
{
int height = fontMetrics.getAscent() - fontMetrics.getDescent();
Polygon triangle = new Polygon();
triangle.addPoint(borderGap, y);
triangle.addPoint(borderGap, y - height);
triangle.addPoint(borderGap + 10, y - height / 2);
Graphics2D g2d = (Graphics2D)g.create();
g2d.fill( triangle );
g2d.dispose();
}
还有一个变化.由于我们现在正在绘制箭头,我们需要增加组件的宽度.因此,在setPreferredWidth(…)方法中,您需要进行以下更改:
//int preferredWidth = insets.left + insets.right + width;
int preferredWidth = insets.left + insets.right + width + 15;
I want to scroll only if the line I want to jump it is not visible.
以下是一些代码:
public static void gotoStartOfLine(JTextComponent component, int line)
{
Element root = component.getDocument().getDefaultRootElement();
line = Math.max(line, 1);
line = Math.min(line, root.getElementCount());
int startOfLineOffset = root.getElement( line - 1 ).getStartOffset();
component.setCaretPosition( startOfLineOffset );
}
我从Text Utilities获取了上面的代码,可能有其他感兴趣的方法(如果不是现在,将来).
如果要在文本窗格中突出显示整行,也可以使用Line Painter.
点击查看更多相关文章
转载注明原文:java – 将JScrollPane的可见区域移动到特定位置 - 乐贴网