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

时间:2014-02-14 19:49:32

标签: java swing jtextfield focuslistener

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

1 个答案:

答案 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);
    }
}
相关问题