在JScrollPane上设置插入位置

时间:2013-07-25 16:05:47

标签: java html swing jtextpane caret

我在JScrollPane中有一个JEditoPane。我有一些包含一些预定义标记的文本内容。我将这些令牌的位置存储在数据库中。 当我将文本内容设置为JEditorPane时,我使用HTML嵌入了令牌。我还添加了HTML中断行来格式化内容。

现在当我想滚动到其中一个突出显示的标记时出现问题。在使用setCaretPosition(int)时,我存储在数据库中的令牌的起始位置似乎不匹配。我知道这可能是因为我在JEditorPane文档中的内容与HTML混合在一起。

那么有没有办法在JEditorPane内容中搜索字符串,然后以某种方式获得发现字符串的插入位置?

2 个答案:

答案 0 :(得分:1)

你就是这样做的(忽略不使用最佳实践;)) -

public static void main( String[] args ) {

    final JEditorPane jEditorPane = new JEditorPane( "text/html", "<h1>This is some header</h1>After this text would be the CARRET<br>This is some more text<br>And more" );
    final JScrollPane jScrollPane = new JScrollPane( jEditorPane );

    final JFrame jframe = new JFrame( "HHHHHH" );
    jframe.add( jScrollPane );
    jframe.setSize( new Dimension( 200, 200 ) );
    jframe.setVisible( true );

    final String text = jEditorPane.getText();
    final int index = text.indexOf( "T" );
    jEditorPane.setCaretPosition( index + 1 );

    while ( true ) {
        try {
            Thread.sleep( 1000000 );
        } catch ( InterruptedException e ) {
            e.printStackTrace();
        }
    }
}

这就是结果:

enter image description here

您应该将indexof的结果存储在数据库中。

答案 1 :(得分:0)

字符串是否有任何共性?如果他们这样做,您可以尝试使用java.util.scanner或/和java.util.regex.Matcher的组合。确保获得正确的正则表达式以满足您的需求。找到字符串后,获取indexOf的第一个字母,并将插入位置设置为它。

Java Scanner

Java Matcher