如何让jTextField最初显示文本,但在选中时清除文本?

时间:2017-06-09 15:14:16

标签: java swing date jtextfield

我想创建单独的年,月和日输入文本字段,以便将我的日期字符串正确格式化为我的SQL查询(yyyy-MM-dd)接受的格式。我对这个问题的解决方案就是让用户将所有这三个分成不同的字段,这样我就可以在后端手动重新格式化它们。我想要做的是让每个文本字段最初显示格式,但是当单击时,将清除文本字段以进行输入。例如,当未选择年份文本字段时,我希望它显示" YYYY" (即使它从未被选中开始)并且当它被选中时,清除文本以进行输入。正如您在下面看到的那样,我也将年份文本字段限制为4个字符。

dateOfPurchaseTextField = new JTextField();
        dateOfPurchaseTextField.addFocusListener(new FocusAdapter() {

            @Override
            public void focusGained(FocusEvent arg0) {

                if (dateOfPurchaseTextField.getText() == "YYYY") {

                    dateOfPurchaseTextField.setText("");
                }
            }
            @Override
            public void focusLost(FocusEvent e) {

                dateOfPurchaseTextField.setText("YYYY");
            }
        });
        dateOfPurchaseTextField.addKeyListener(new KeyAdapter() {
            @Override
            public void keyTyped(KeyEvent e) {

                if (dateOfPurchaseTextField.getText().length() >= 4) {

                    if (e.getKeyCode() != 8 && e.getKeyCode() != 46)

                    e.consume();
                }
            }
        });
    dateOfPurchaseTextField.setHorizontalAlignment(SwingConstants.CENTER);
    dateOfPurchaseTextField.setFont(new Font("Tahoma", Font.PLAIN, 14));
    dateOfPurchaseTextField.setColumns(10);
    dateOfPurchaseTextField.setBounds(819, 603, 46, 22);
    inventoryFrame.getContentPane().add(dateOfPurchaseTextField);

当我运行我的页面时," YYYY"但是,一旦它被选中然后被取消选择,它将最初弹出,然后它将显示" YYYY"从那时起。我的另一种解决方案是获得" YYYY"最初出现的是将值初始设置为" YYYY"但是当发生这种情况时,选择文本框时文本值不会清除。我该如何解决这个问题?

另一方面,如果有人有更有效的方式让文本字段的日期始终在" yyyy-MM-dd"格式,我很想知道!提前谢谢!

编辑:这个问题与提供的问题不同,因为解决方案完全不同,虽然这个问题是询问整个过程是如何完成的,但这个问题只是问为什么" YYYY"占位符最初从未显示过。

0 个答案:

没有答案