2014-02-14 39 views
0

我在JFrame中有5 JTextField s,并且我已经在循环中为其中的所有元素添加了FocusListenerJTextField - 在focusLost事件中更改插入符号位置

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

_so了各自领域内的文本可以从beginning._你是什么意思阅读?如果调用'getText()'方法,您将获得整个文本字段内容,插入位置将不会影响此方法调用。 – Laf

+1

@Laf我认为OP的意思是“可以直观地阅读”,即如果文本比JTextField长,文本的开头可能不可见。也许OP可以澄清。 – splungebob

+0

@splungebob你是对的。这正是我的意思。 – mundomug

回答

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

它没有工作。 – mundomug

+0

@mundomug,请参阅编辑。 – camickr

+0

非常好!它像一个魅力!谢谢! – mundomug

相关问题