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

UI スレッドから、または任意の UI コンポーネントを更新する必要jTextPane1があります。invokeLater または invokeAndWait を使用できます。

例えば

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