Java JTextField焦点问题

Java JTextField焦点问题,java,swing,Java,Swing,我想知道是否可以使用打印初始化文本字段(这部分我知道怎么做),然后突出显示打印,然后在用户开始键入时消失?即使没有突出显示,您如何让字段初始化为“请输入您的电话号码”,然后使其消失,这样用户就不必删除文本? 用一些已知的文本初始化jtextfield实例,如“请输入您的电话号码” 实施 在focusgound()中,检查JTextField实例是否具有已知文本,以及是否清除了文本;如果没有,什么也不做 这是一个代码示例 final String INITIAL_TEXT = "Plea

我想知道是否可以使用打印初始化文本字段(这部分我知道怎么做),然后突出显示打印,然后在用户开始键入时消失?即使没有突出显示,您如何让字段初始化为“请输入您的电话号码”,然后使其消失,这样用户就不必删除文本?

  • 用一些已知的文本初始化
    jtextfield
    实例,如“请输入您的电话号码”
  • 实施
  • 在focusgound()中,检查JTextField实例是否具有已知文本,以及是否清除了文本;如果没有,什么也不做
这是一个代码示例

    final String INITIAL_TEXT = "Please enter your ph. number";
    final JTextField textField = new JTextField(INITIAL_TEXT);
    textField.addFocusListener(new FocusListener() {

        @Override
        public void focusGained(FocusEvent e) {
            if (textField.getText().equals(INITIAL_TEXT)) {
                textField.setText("");
            }

        }

        @Override
        public void focusLost(FocusEvent e) {

        }
    });

还有另一种方法,FocusGain事件。 只需标记初始文本:

   String initialText = "Enter your story here...";
   ...
   jTextArea1.setText(initialText); 
   ...

   private void focusGained(java.awt.event.FocusEvent evt) {
        if (jTextArea1.getText().equals(initialText)) {
            //jTextArea1.setSelectionStart(0);
            //jTextArea1.setSelectionEnd(jTextArea1.getText().length());
            jTextArea1.selectAll();
        }
    }

这样,每当用户在jTextArea1中键入内容时,就会立即替换初始文本

focusLost
中,如果用户没有输入任何内容,则将初始文本放回原处是一种很好的可用性。像这样:

public void focusLost(FocusEvent e)
{
    // If the field is empty, set the default text when losing focus.
    if (inputField.getText().isEmpty())
    {
        inputField.setText(INITIAL_TEXT);
    }
}
或者,如果您不想使用
focusLost
方法,您可以创建一个扩展
FocusAdapter
的内部类
MyFocusListener
,这样您只需要实现想要使用的方法

private class MyFocusListener extends FocusAdapter
{
    public void focusGained(FocusEvent e)
    {
        // do your magic!   
    }

    // ignore the focusLost method
}
public boolean isCorrect(){
数据=新字符串[6];
对于(int i=0;i
天哪。非常感谢。对不起,@override是什么?它是一个注释。这是它的文档。嗯……我正试图编写一个程序,在文本字段中获取一个名称,实际上,当我失去焦点而字段中没有名称时,我应该提示输入一个名称。现在,当我按照上面的建议操作时,我的组合框中的功能将丢失(但是我的JList和我的复选框一样仍然有效)。这有什么用?我为我的焦点丢失编写了以下代码:public void focusLost(FocusEvent e){if(e.getSource()==gui.regPanel.regTextField&&gui.regPanel.regTextField.getText().trim().equals(“”){gui.regPanel.regTextField.setText(错误文本);gui.regPanel.regTextField.requestFocusInWindow();}}@单位:别忘了给shadowfoxmi的帖子投票,如果你觉得它代表了原始问题的答案,那么就接受它。无论你是否接受,他都应该获得投票权,这仅仅是因为他为帮助你所付出的努力。或者只是在JTextArea上调用selectAll(),而不是设置selection start和end.Thanx!selectAll()更好。实际上,我最终还是接受了Costis的建议。工作起来很有魅力。谢谢现在要找出最后两个bug,那么我就完成了。在本例中,适配器并没有给您带来太多好处,因为它只有两个方法,但适配器模式适用于大多数侦听器接口。特别是MouseAdapter非常有用,因为它同时实现了MouseListener和MouseWheelListener,并且您只实现了所有鼠标操作中您喜欢的方法(有很多)
public boolean isCorrect() {
    data = new String[6];
    for (int i = 0; i < informationLabel.length; i++) {
        if (i == 0) {
            if (!informationTextField[i].getText().equals("")) {
                data[i] = informationTextField[i].getText();
            }
            else
                return false;
        }
        if (i == 1 || i == 2) {
            if (informationPasswordField[i - 1].getText().equals(""))
                return false;
        }
        if (i == 3 || i == 4 || i == 5 || i == 6) {
            if (!informationTextField[i - 2].getText().equals("")) {
                data[i - 1] = informationTextField[i - 2].getText();
            }
            else
                return false;
        }
    }
    return true;
}