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*/