2

我已经像这样添加ComponentListenerJTextField父级:

parent.addComponentListener(new ComponentAdapter() {
    @Override
    public void componentHidden(ComponentEvent e) {
        setText("");
    }
});

所以在父级变得不可见后,textField文本设置为“”。一切正常,但问题是当我将父级设置为可见时 - 显示之前的文本几毫秒textField,然后字段变为空。所以不太好看。。

4

1 回答 1

1

在将父级设置为不可见之前,textField已设置字段textField.setText(null);(无需重新绘制),然后问题在于焦点 - 它必须设置为一些初始组件,例如panel.requestFocusInWindow();. 但重点并不总是及时设置。所以Timer类解决了这个问题:

textField.setText(null);
panel.requestFocusInWindow();

final int timeout = 5;
        Timer timer = new Timer(timeout, new ActionListener() {
            int a = 0;

            @Override
            public void actionPerformed(ActionEvent e) {
                if (panel.isFocusOwner() || a > 500) {
                    EventQueue.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                            setVisible(false);
                        }
                    });
                    ((Timer) e.getSource()).stop();
                }
                a += timeout;
            }
        });
        timer.setRepeats(true);
        timer.start();

现在,如果显示为新创建的对话框窗口(父级)setVisible(true);- 没有闪烁的 textFields 并且焦点正确。最后.. :)

于 2013-08-21T23:40:19.710 回答