0

我实现了在 jTextPane 中突出显示单词的方法。如果我从主类调用该方法,一切正常,但如果我从另一个类调用该方法,而循环不起作用。这是我的代码:

// Main class with my method, I named it Frame

public void traziJedan(String rijec){
        try{
        Highlighter h = jTextPane1.getHighlighter();
        h.removeAllHighlights();
        String text = jTextPane1.getText();
        String pattern = rijec;
        int pos = 0;

        while ((pos = text.indexOf(pattern, pos)) >= 0) {
                System.out.println(rijec);
                h.addHighlight(pos, pos + pattern.length(), DefaultHighlighter.DefaultPainter);
                pos += pattern.length();

            }

        }
        catch(BadLocationException e){}
    }

// method in another class

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        Frame f = new Frame();
        f.traziJedan(jTextField1.getText());
    }

System.out.println(rijec); 我把它放在这里只是为了看看这个方法是否有效,但是这个词不会只在 while 循环中打印出来,如果我把这个命令放在其他任何地方,我会得到正确的输出。这里有什么问题。

4

2 回答 2

0

我猜当您在您的方法中jTextPane1分配一个新 Frame: 时,您的初始化不正确。Frame f = new Frame();jButton1ActionPerformed

Frame当你使用另一个类的方法时不要分配一个新的,而是传入现有的 Frame 实例。

于 2012-12-30T17:14:19.277 回答
0

您应该jTextPane1从 UI 线程更新或任何 UI 组件,您可以使用 invokeLater 或 invokeAndWait

例如

SwingUtilities.invokeLater(new Runnable() {
  public void run() {
    // update UI
  }
});
于 2012-12-30T17:07:36.223 回答