java - JTextField - 更改 focusLost 事件上的插入符位置

标签 java swing jtextfield focuslistener

我在 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);
    }
}

关于java - JTextField - 更改 focusLost 事件上的插入符位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21788321/

相关文章:

java - 固定位置的 JFrame 布局

java - 如何将变量从一个 JFrame 传递到另一个 JFrame

java - 如何从图像文件加载启动屏幕

java - 如何自动调整java swing元素的大小?

java - 如何将数据从保存在 ArrayList 中的 textField 值添加到 JTable?

java - 是否可以使用 JSlider 控制多个 JTextfield?

java - java实例数组不需要初始化数组大小吗?

java - 如何为 JSplitPane 设置自定义分隔线

java - JComboBox - 如何呈现时间值的名称

java - 如何将 JTextField 转换为 int 并再次返回?