java编写的GUI 怎么实现查找功能(使用搜索栏搜索) 还是这个问题

我把你给的代码改了一下importjavax.swing.JTextField;importjava.awt.Dimension;importjavax.swing.JB... 我把你给的代码改了一下
import javax.swing.JTextField;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.JTextPane;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.BadLocationException;
import javax.swing.JOptionPane;

public class SearchBar extends JTextField
{
JButton searchButton;
JTextField textField;
JTextPane text=null;

public SearchBar(JTextPane text){
//super("used for searching",20);
//setPreferredSize(new Dimension(10, 300)); //the latter
//setSize(400,400);
searchButton = new JButton(new ImageIcon("search.png"));
searchButton.setToolTipText("Click to search");
//searchButton.addActionListener();
textField = new JTextField("used for searching",20);
this.text=text;
}

public JButton getSearchButton(){
return searchButton;
}

public JTextField getSearchBar(){
return textField;
}

public void myAction(){
String textInText = text.getText();
String keyword = textField.getText();
//System.out.printf("%s",textInText);
//System.out.printf("%s",keyword);
int index = textInText.indexOf(keyword);

if (index != -1) {
text.getHighlighter().removeAllHighlights();
try {
while (index != -1 & !keyword.equals("") ) {
text.getHighlighter().addHighlight(index, index + keyword.length(), DefaultHighlighter.DefaultPainter);
index = textInText.indexOf(keyword, index + keyword.length());
}
}
catch (BadLocationException ex) {
ex.printStackTrace();
}
}
else
JOptionPane.showMessageDialog(SearchBar.this,"Can't find keyword:" + keyword);

}
}
但现在出现的问题是,高亮的显示有一些偏差。比如第二行有12345678,我搜索1234,高亮的是2345。第一行没有偏差,从第二行开始越往下偏差越严重。怎么解决呢?再次谢谢你啊!
展开
 我来答
skyyks0001
2010-03-09 · TA获得超过430个赞
知道小有建树答主
回答量:228
采纳率:100%
帮助的人:399万
展开全部
最近都没怎么来这里 不好意思这么久才回你

我猜你测试的时候是键入的这些内容
是这样的:
在我们键入回车键的时候,实际上生成的是两个字符:一个是换行键(ASCII码13),一个是回车键(ASCII码10)
然后用indexOf查找的时候 每多一个回车 实际上多出一个字符
而在highlighter 渲染的时候 会认为这两个字符是一个字符
所以就会每行下错一个

把你的这行:
String textInText = text.getText();
改成:
String textInText = text.getText().replaceAll(String.valueOf((char) 13), "");
text.setText(textInText);

这样就可以了

暂时怀疑这是HighLighter的bug 等我腾出时间来仔细看看类库里边怎么写的吧
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式