我在JFrame
中有5 JTextField
s,并且我已经在循环中为其中的所有元素添加了FocusListener
。JTextField - 在focusLost事件中更改插入符号位置
在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);
}
}
}
_so了各自领域内的文本可以从beginning._你是什么意思阅读?如果调用'getText()'方法,您将获得整个文本字段内容,插入位置将不会影响此方法调用。 – Laf
@Laf我认为OP的意思是“可以直观地阅读”,即如果文本比JTextField长,文本的开头可能不可见。也许OP可以澄清。 – splungebob
@splungebob你是对的。这正是我的意思。 – mundomug