Java JTextField。在JText区域中查找并突出显示单词

Java JTextField。在JText区域中查找并突出显示单词,java,swing,focus,Java,Swing,Focus,我写了一个代码,在JTextArea中查找并突出显示一个单词,我遇到了一个问题,我太累了,头疼得看不到我的错误。 我有一个搜索栏(TextField),在这里我可以输入一个单词,而这个单词在我的TextArea中会变得更亮。问题是,在我按下“ENTER”键后,TextField被取消选中,我必须再次单击它以查找下一个单词。我错过了什么 findfieldpage1 = new JTextField(); findfieldpage1.setBounds(37, 295, 63, 24); gta

我写了一个代码,在
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();
            }
        }
        }
    }
});
findfieldpage1=newjtextfield();
findfieldpage1.立根(37,295,63,24);
gtapage1.add(findfieldpage1);
findfieldpage1.addKeyListener(新的KeyAdapter(){
按下公共无效键(KeyEvent evt){
int code=evt.getKeyCode();
if(code==KeyEvent.VK_ENTER){
字符串find=findfieldpage1.getText().toLowerCase();
textpage1.requestFocusInWindow();
if(find!=null&&find.length()>0){
Document Document=textpage1.getDocument();
int findLength=find.length();
试一试{
布尔值=false;
如果(pos+findLength>document.getLength()){
pos=0;
}

而(pos+findlelength搜索完成后,您不会将焦点转移回文本字段


在末尾添加:Jtextfield.requestfocus()

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


在末尾添加:Jtextfield.requestfocus()

方法中的第10行是
textpage1.requestFocusInWindow();
,这就是它失去焦点的原因,因为您正在将其传输到JTextArea。

方法中的第10行是
textpage1.requestFocusInWindow()这就是它失去焦点的原因,因为您正在将它传输到JTextArea。

最后,为了避免麻烦。我添加了一个JButton,并将按键更改为actionPerformed。因此,每次单击该按钮,它都会找到并突出显示我在文本字段中输入的字符串。谢谢大家的帮助,我非常感激。

最后,为了避免麻烦。我添加了一个JButton并将按键改为actionPerformed。因此,每次我单击该按钮,它都会找到并突出显示我在文本字段中输入的字符串。感谢你们的帮助,我对此表示感谢。

在文本区域再添加一个侦听器。在焦点转移到文本区域后,它将保持在文本区域中extarea和事件(按enter键)等将进行搜索

/搜索字段开始/

JTextField findtext=new JTextField();
//findtext.setBounds(112549,63,24);
frame.add(findtext,BorderLayout.在第一行之前);
addKeyListener(新的KeyAdapter(){
按下公共无效键(KeyEvent evt){
int code=evt.getKeyCode();
if(code==KeyEvent.VK_ENTER){
字符串find=findtext.getText().toLowerCase();
tarea.requestFocusInWindow();
//findtext.requestFocus();
//findtext.requestFocusInWindow();
if(find!=null&&find.length()>0){
Document Document=tarea.getDocument();
int findLength=find.length();
试一试{
//int pos=0;
布尔值=false;
如果(pos+findLength>document.getLength()){
pos=0;
}
同时(位置+findLength 0){
Document Document=tarea.getDocument();
int findLength=find.length();
试一试{
//int pos=0;
布尔值=false;
如果(pos+findLength>document.getLength()){
pos=0;
}

而(pos+findLength在textarea中再添加一个侦听器。焦点转移到text area后,它将保留在textarea中,事件(按enter键)等将使搜索发生

/搜索字段开始/

JTextField findtext=new JTextField();
//findtext.setBounds(112549,63,24);
frame.add(findtext,BorderLayout.在第一行之前);
addKeyListener(新的KeyAdapter(){
按下公共无效键(KeyEvent evt){
int code=evt.getKeyCode();
if(code==KeyEvent.VK_ENTER){
字符串find=findtext.getText().toLowerCase();
tarea.requestFocusInWindow();
//findtext.requestFocus();
//findtext.requestFocusInWindow();
if(find!=null&&find.length()>0){
Document Document=tarea.getDocument();
int findLength=find.length();
试一试{
//int pos=0;
布尔值=false;
如果(pos+findLength>document.getLength()){
pos=0;
}
同时(位置+findLength 0){
Document Document=tarea.getDocument();
int findLength=find.length();
试一试{
//int pos=0;
布尔值=false;
如果(pos+findLength>document.getLength()){
pos=0;
}

虽然(pos+findLength如果你需要帮助,你必须提供一个演示问题的示例。如果没有这个示例,我们能给你的最好建议是休息一下,然后用新的眼睛看这个。取消选择意味着它失去焦点,或者里面的文本没有被选择?@KevinWorkman我会按照你的建议睡一会儿。@rhobincu it loses焦点,内部文本已选中,但失去焦点。1)
    JTextField findtext = new JTextField();
    //findtext.setBounds(112,549, 63, 24);
    frame.add(findtext,BorderLayout.BEFORE_FIRST_LINE);

    findtext.addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent evt) {
            int code = evt.getKeyCode();

            if(code == KeyEvent.VK_ENTER){
                String find = findtext.getText().toLowerCase();
                tarea.requestFocusInWindow();
                //findtext.requestFocus();
                //findtext.requestFocusInWindow();
                if (find != null && find.length()> 0) {
                    Document document = tarea.getDocument();
                    int findLength = find.length();
                    try {
                         //int pos=0;
                         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 = tarea.modelToView(pos);
                        tarea.scrollRectToVisible(viewRect);
                        tarea.setCaretPosition(pos + findLength);
                        tarea.moveCaretPosition(pos);
                        pos += findLength;
                        //Thread.sleep(2000);
                      //  findtext.requestFocusInWindow();

                    }

                } catch (Exception exp) {
                    exp.printStackTrace();
                }
            }

                 }//findtext.requestFocusInWindow();
        }
    });

    /*control back to textarea*/
    tarea.addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent evt) {
            int code = evt.getKeyCode();

            if(code == KeyEvent.VK_ENTER){
                String find = findtext.getText().toLowerCase();
                tarea.requestFocusInWindow();
                //findtext.requestFocus();
                //findtext.requestFocusInWindow();
                if (find != null && find.length()> 0) {
                    Document document = tarea.getDocument();
                    int findLength = find.length();
                    try {
                         //int pos=0;
                         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 = tarea.modelToView(pos);
                        tarea.scrollRectToVisible(viewRect);
                        tarea.setCaretPosition(pos + findLength);
                        tarea.moveCaretPosition(pos);
                        pos += findLength;
                        //Thread.sleep(2000);
                      //  findtext.requestFocusInWindow();

                    }

                } catch (Exception exp) {
                    exp.printStackTrace();
                }
            }

                 }//findtext.requestFocusInWindow();
        }
    });


    /*search filed ends*/