我实现了在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循环中打印出来,如果我把这个命令放在其他地方我得到正确的输出。这有什么问题。
答案 0 :(得分:0)
您应该从UI线程更新jTextPane1
或任何UI组件,您可以使用invokeLater或invokeAndWait
e.g。
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// update UI
}
});
答案 1 :(得分:0)
我猜您在jTextPane1
方法中分配新的框架Frame f = new Frame();
时未正确初始化jButton1ActionPerformed
。
当您使用其他类中的方法时,请不要分配新的Frame
,而是传入现有的Frame实例。