我写了一个代码来查找并突出显示JTextArea
中的一个单词,我遇到了一个问题而且我太累了,并且看到我的错误让我很头疼。
我有一个搜索栏(TextField
),我可以在其中输入一个单词,然后我的TextArea
中的单词会变亮。问题是,在我按下“ ENTER ”键后,TextField
被取消选中,我必须再次点击它才能找到下一个单词。我错过了什么?
findfieldpage1 = new JTextField();
findfieldpage1.setBounds(37, 295, 63, 24);
gtapage1.add(findfieldpage1);
findfieldpage1.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
int code = evt.getKeyCode();
if(code == KeyEvent.VK_ENTER){
String find = findfieldpage1.getText().toLowerCase();
textpage1.requestFocusInWindow();
if (find != null && find.length() > 0) {
Document document = textpage1.getDocument();
int findLength = find.length();
try {
boolean found = false;
if (pos + findLength > document.getLength()) {
pos = 0;
}
while (pos + findLength <= document.getLength()) {
String match = document.getText(pos, findLength).toLowerCase();
if (match.equals(find)) {
found = true;
break;
}
pos++;
}
if (found) {
Rectangle viewRect = textpage1.modelToView(pos);
textpage1.scrollRectToVisible(viewRect);
textpage1.setCaretPosition(pos + findLength);
textpage1.moveCaretPosition(pos);
pos += findLength;
}
} catch (Exception exp) {
exp.printStackTrace();
}
}
}
}
});
答案 0 :(得分:2)
搜索完成后,您没有将焦点转移回文本字段
最后添加:Jtextfield.requestfocus()
答案 1 :(得分:2)
你方法中的第10行是textpage1.requestFocusInWindow();
,这就是它失去焦点的原因,因为你将它转移到JTextArea。
答案 2 :(得分:0)
答案 3 :(得分:0)
向textarea添加一个侦听器。在焦点转移到文本区域后,这样它将保留在textarea中并且事件(输入按键)等将使搜索发生。
/ 搜索字段开始 /
backbone model