Выделите слово в JEditorPane

Я должен выделить все вхождения слова в JEditorPane . Для этого я использую следующий код:

 try
{          
javax.swing.text.DefaultHighlighter.DefaultHighlightPainter highlightPainter = 
    new javax.swing.text.DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
textPane.getHighlighter().addHighlight(startPos, endPos, 
highlightPainter);
}
catch(Exception ex)
{
}

Но как я могу указать позицию индекса слова?

Я читаю содержимое из файла, но он также читает теги HTML и нарушает индекс слов.


person adesh    schedule 19.11.2012    source источник


Ответы (3)


По сути, вы должны иметь возможность просматривать документ в поисках совпадений, которые вам нужны...

введите здесь описание изображения

public class TestEditorPane01 {

    public static void main(String[] args) {
        new TestEditorPane01();
    }

    public TestEditorPane01() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JEditorPane editor = new JEditorPane();
                try {
                    editor.setPage(new File("Test.html").toURI().toURL());
                } catch (Exception exp) {
                    exp.printStackTrace();
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new JScrollPane(editor));
                frame.setSize(400, 400);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);

                Document document = editor.getDocument();
                try {
                    String find = "Method";
                    for (int index = 0; index + find.length() < document.getLength(); index++) {
                        String match = document.getText(index, find.length());
                        if (find.equals(match)) {
                            javax.swing.text.DefaultHighlighter.DefaultHighlightPainter highlightPainter =
                                    new javax.swing.text.DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
                            editor.getHighlighter().addHighlight(index, index + find.length(),
                                    highlightPainter);
                        }
                    }
                } catch (BadLocationException ex) {
                    ex.printStackTrace();
                }

            }
        });
    }
}

Это пройдёт весь документ и выделит все совпадения. Это также чувствительное к регистру совпадение;)

person MadProgrammer    schedule 19.11.2012
comment
в каком классе пакета документов доступен . - person adesh; 20.11.2012
comment
хорошо, но когда я вызываю document.getText(0,document.getLength()); он ничего не возвращает. - person adesh; 20.11.2012
comment
Это должно быть document.getText(0,document.getLength() - 1), иначе может возникнуть исключение. Если это не сработает, мне нужно увидеть код... - person MadProgrammer; 20.11.2012

Вот мой случай, нужно выделить одно слово для поиска в EditorPane:

    // text in EditPane
    String text = rSyntaxTextArea.getText();
    if (text != null && !"".equals(filterText.getText())) {
        Highlighter hilit = new RSyntaxTextAreaHighlighter();
        rSyntaxTextArea.setHighlighter(hilit);  
        for (int index = text.toUpperCase().indexOf(
                // searched text
                filterText.getText().toUpperCase()); index >= 0; index = text
                .toUpperCase().indexOf(
                        filterText.getText().toUpperCase(), index + 1)) {
            int end = index + filterText.getText().length();
            HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(
                    Color.LIGHT_GRAY);
            try {
                hilit.addHighlight(index, end, painter);
            } catch (BadLocationException e) {
                e.printStackTrace();
            }
        }
    }

Надеюсь, это поможет.

person Bo PENG    schedule 19.11.2012

Вы можете сделать что-то, как показано ниже:

getHighlighter().addHighlight(start, end, 
         new DefaultHighlighter.DefaultHighlightPainter(Color.red));
person tokhi    schedule 19.11.2012