JFrame
에 5 개의 JTextField
이 있고 루프에 모두 FocusListener
이 추가되었습니다.JTextField - focusLost 이벤트에서 캐럿 위치 변경
focusGained()
이벤트에서 나는 setCaretPosition()
메서드를 사용하여 JTextField
끝까지 캐럿을 이동합니다.
focusLost()
이벤트에서 해당 필드의 텍스트를 처음부터 읽을 수 있도록 JTextField
시작 부분으로 캐럿을 이동하려고합니다.
focusLost 이벤트에서 수행 할 작업을 파악할 수 없습니다. caretPosition을 0으로 설정하려고 시도했지만 작동하지 않았습니다.
누군가 나를 도와 줄 수 있습니까?
편집 :
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 : 여기
가 SSCCE의 여기
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);
}
}
}
_ 시작 부분부터 텍스트를 읽을 수 있습니다 ._ 무엇을 의미합니까? ? 'getText()'메서드를 호출하면 (자), 텍스트 필드의 내용 전체가 취득됩니다. caret의 위치는,이 메소드 호출에는 영향을주지 않습니다. – Laf
@Laf OP는 "시각적으로 읽을 수 있음"을 의미합니다. 즉, 텍스트가 JTextField보다 길면 텍스트의 시작 부분이 보이지 않을 수도 있습니다. 아마도 OP가 명확해질 수 있습니다. – splungebob
@splungebob 당신은 절대적으로 맞습니다. 그것이 바로 제가 의미했던 것입니다. – mundomug