JTextField的。在JTextArea中查找并突出显示该单词

时间:2014-01-09 16:03:02

标签: java swing focus

我写了一个代码来查找并突出显示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();
            }
        }
        }
    }
});

4 个答案:

答案 0 :(得分:2)

搜索完成后,您没有将焦点转移回文本字段

最后添加:Jtextfield.requestfocus()

答案 1 :(得分:2)

你方法中的第10行是textpage1.requestFocusInWindow();,这就是它失去焦点的原因,因为你将它转移到JTextArea。

答案 2 :(得分:0)

最后,为了避免麻烦。我添加了一个JButton并将keyPressed更改为actionPerformed。因此,每次单击该按钮时,它都会查找并突出显示我在TextField中输入的字符串。谢谢你的帮助,我很感激。

答案 3 :(得分:0)

向textarea添加一个侦听器。在焦点转移到文本区域后,这样它将保留在textarea中并且事件(输入按键)等将使搜索发生。

/ 搜索字段开始 /

backbone model