2014-05-15 39 views
1

当我在用户ID框中按下某个键时,我希望当按下第一个键时,教科书中的文本将被删除。无法获取JTextField在keyPressed上将文本设置为null?

我认为下面的代码会做到这一点,但它并没有擦除文本字段中的文本。

如何将文本设置为在我的JTextField中为空?

代码:

@Override 
public void keyPressed(KeyEvent e) { 
    final Component source = e.getComponent(); 
    final JFrame frame = (JFrame) SwingUtilities.getRoot(source); 

     if (source instanceof JTextField){ 
      ((JTextField) source).setText(""); 
      source.repaint(); 
     } 
} 

我要指出,我KeyListener的是一个完全不同的类。

class myKeyListener implements KeyListener { 

    @Override 
    public void keyTyped(KeyEvent e) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
     final Component source = e.getComponent(); 
     final JFrame frame = (JFrame) SwingUtilities.getRoot(source); 

     JTextField tf = (JTextField)e.getSource(); 
     tf.setText(""); 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 
     // TODO Auto-generated method stub 
    } 
} 
+0

你是怎么实际使用这段代码的?我们能看到更多的节目吗? –

+0

因此,当用户首先在userID字段中键入内容时,您想要删除userID文本?下一个问题是,为什么? – MadProgrammer

+0

一旦你得到这个工作,你将不得不添加一些逻辑来确定什么时候你想实际清除'JTextField'。否则,每次按下按键时都会清除它,这意味着用户将永远无法输入任何内容。 –

回答

1

尝试使用e.getSource():

@Override 
public void keyPressed(KeyEvent e) { 
    JTextField tf = (JTextField)e.getSource(); 
    tf.setText(""); 
} 

上面的代码离开键入的字符在框中。如果你想结束没有字符(虽然,我不知道你为什么想这样做),那么也许你应该把这个代码放在keyReleased()?

+1

这和OP的做法基本不一样吗? –

+0

我认为它不适用于OP。我通常这样做。但我认为我现在看到了这个问题。 –

+0

哦,我明白了,您正在调用'getSource()'而不是'getComponent()'。你可能想在你的答案中明确指出。 –

1

在JTextField中选择文本要容易得多,所以当用户输入一个字符时,文本就会消失。

JTextField textField = new JTextField(10); 
    textField.setText("Type in something here"); 
    textField.setSelectionStart(0); 
    textField.setSelectionEnd(textField.getText().length()); 
+0

这是在keyListener类中,而不是在原始类中?我试过这个,但它仍然无法正常工作。我错过了什么? –

+0

@Doug Hauf:这在原班上。没有必要使用keyListener类。 –

+0

如果这是老板想要保持更好的质量,他会怎么做呢? –