gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:18 26 4
gpt4 key购买 nike

我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com