我在JTextField
中有5个JFrame
,我在循环中为所有这些添加了FocusListener
。
在focusGained()
事件中,我正使用JTextField
方法将插入符号移至setCaretPosition()
的末尾。
在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);
}
}
}
答案 0 :(得分:1)
我尝试将caretPosition设置为零,但它不起作用。
尝试将代码包装在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);
}
}