2014-02-14 2 views
0

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); 
    } 
} 
} 
+0

_ 시작 부분부터 텍스트를 읽을 수 있습니다 ._ 무엇을 의미합니까? ? 'getText()'메서드를 호출하면 (자), 텍스트 필드의 내용 전체가 취득됩니다. caret의 위치는,이 메소드 호출에는 영향을주지 않습니다. – Laf

+1

@Laf OP는 "시각적으로 읽을 수 있음"을 의미합니다. 즉, 텍스트가 JTextField보다 길면 텍스트의 시작 부분이 보이지 않을 수도 있습니다. 아마도 OP가 명확해질 수 있습니다. – splungebob

+0

@splungebob 당신은 절대적으로 맞습니다. 그것이 바로 제가 의미했던 것입니다. – mundomug

답변

1

I 0으로 caretPosition 설정을 시도했지만 그것은 작동하지 않았다.

코드를 SwingUtilities.invokeLater()에 넣어보십시오.

추가 도움이 필요하면 문제를 나타내는 MCTRE을 게시하십시오.

코드가 지나치게 복잡합니다. 이벤트를 생성 한 텍스트 필드의 캐럿을 재설정해야합니다 (텍스트 필드 전체가 아님).

+0

작동하지 않았습니다. – mundomug

+0

@mundomug, 편집을 참조하십시오. – camickr

+0

우수! 그것은 매력처럼 작동합니다! 고맙습니다! – mundomug