我在 JFrame
中有 5 个 JTextField
,并且我在循环中向所有这些 JTextField
添加了一个 FocusListener
。
在 focusGained()
事件中,我使用 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);
}
}
编辑#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);
}
}
}
I tried setting the caretPosition to zero but it didn't work.
尝试将代码包装在 SwingUtilities.invokeLater()
中。
如果您需要更多帮助,请发布 MCTRE这说明了问题。
您的代码过于复杂。您只需重置生成事件的文本字段(不是所有文本字段)的插入符号:
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);
}
}
我是一名优秀的程序员,十分优秀!