Java JTextField-更改focusLost事件上的插入符号位置
我在一个Java JTextField-更改focusLost事件上的插入符号位置,java,swing,jtextfield,focuslistener,Java,Swing,Jtextfield,Focuslistener,我在一个JFrame中有5个JTextFields,我在一个循环中向所有这些字段添加了一个FocusListener 在focusgound()事件中,我使用setCaretPosition()方法将插入符号移动到JTextField的末尾 在focusLost()事件中,我试图将插入符号移动到JTextField的开头,以便可以从开头读取相应字段中的文本 我不知道在focusLost事件中该做什么。我尝试将caretPosition设置为零,但没有成功 有人能帮我吗 编辑: 以下是SSCCE:
JFrame
中有5个JTextField
s,我在一个循环中向所有这些字段添加了一个FocusListener
在focusgound()
事件中,我使用setCaretPosition()
方法将插入符号移动到JTextField
的末尾
在focusLost()
事件中,我试图将插入符号移动到JTextField
的开头,以便可以从开头读取相应字段中的文本
我不知道在focusLost事件中该做什么。我尝试将caretPosition设置为零,但没有成功
有人能帮我吗
编辑:
以下是SSCCE:
public void focusGained(FocusEvent etffl)
{
for(int i = 0; i < 5; i++)
{
field[i].setCaretPosition(field[i].getText().length());
}
}
public void focusLost(FocusEvent etffl)
{
for(int i = 0; i < 5; i++)
{
field[i].setCaretPosition(0);
}
}
public void focusgovered(FocusEvent etffl)
{
对于(int i=0;i<5;i++)
{
字段[i].setCaretPosition(字段[i].getText().length());
}
}
公共无效焦点丢失(焦点事件etffl)
{
对于(int i=0;i<5;i++)
{
字段[i].setCaretPosition(0);
}
}
编辑#2:
这是MCTRE:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class SampleGUI
{
public static JTextField[] field = new JTextField[5];
public static void main(String[] args)
{
JFrame frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel();
for(int i=0; i<5; i++)
{
field[i] = new JTextField(20);
field[i].addFocusListener(new TextFieldFocusListener());
panel.add(field[i]);
}
frame.add(panel);
frame.setSize(300,300);
frame.setVisible(true);
}
}
//TextFieldFocusListener
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class TextFieldFocusListener implements FocusListener
{
public void focusGained(FocusEvent etffl)
{
for(int i = 0; i < 5; i++)
{
SampleGUI.field[i].setCaretPosition(SampleGUI.field[i].getText().length());
}
}
public void focusLost(FocusEvent etffl)
{
for(int i = 0; i < 5; i++)
{
SampleGUI.field[i].setCaretPosition(0);
}
}
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入javax.swing.event.*;
类示例GUI
{
公共静态JTextField[]字段=新JTextField[5];
公共静态void main(字符串[]args)
{
JFrame框架=新的JFrame(“框架”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
最终JPanel面板=新JPanel();
对于(int i=0;i
我尝试将caretPosition设置为零,但没有成功
尝试将代码包装在一个SwingUtilities.invokeLater()
中
如果你需要更多的帮助,那就发一篇文章来说明这个问题
您的代码过于复杂。您只需重置生成事件的文本字段(不是所有文本字段)的插入符号:
这样就可以从一开始就读取相应字段中的文本。你的意思是什么?如果调用getText()
方法,就会得到整个文本字段的内容,插入符号的位置对该方法调用没有影响。@Laf我想OP的意思是“可以直观地读取”,也就是说,如果文本比JTextField长,文本的开头可能不可见。也许OP可以澄清。@splungebob你完全正确。这正是我的意思。编辑(修复旧注释):为了更快地获得更好的帮助,请发布一篇演示问题的文章。很多时候,仅仅创建一个例子就可以揭示问题。
class TextFieldFocusListener implements FocusListener
{
public void focusGained(FocusEvent etffl)
{
JTextField textField = (JTextField)etffl.getComponent();
textField.setCaretPosition(textField.getDocument().getLength());
}
public void focusLost(FocusEvent etffl)
{
JTextField textField = (JTextField)etffl.getComponent();
textField.setCaretPosition(0);
}
}