Java 如何在父组件设置为“setVisible(false)”后清除JTextField文本?

Java 如何在父组件设置为“setVisible(false)”后清除JTextField文本?,java,swing,jtextfield,componentlistener,Java,Swing,Jtextfield,Componentlistener,我已将ComponentListener添加到JTextField父级,如下所示: parent.addComponentListener(new ComponentAdapter() { @Override public void componentHidden(ComponentEvent e) { setText(""); } }); 因此,在父项不可见后,textFieldtext被设置为“”。一切都正常,但问题是当我将parent设置为visi

我已将
ComponentListener
添加到
JTextField
父级,如下所示:

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

因此,在父项不可见后,
textField
text被设置为“”。一切都正常,但问题是当我将parent设置为visible时,会显示
textField
的前一个文本几毫秒,然后字段变为空。因此这不是很好。

在将父项设置为不可见之前,
textField
字段设置为
textField.setText(null)(无需重新绘制),那么问题在于焦点-它必须设置为一些初始组件,如
panel.requestFocusInWindow()。但焦点并不总是及时确定的。因此,
Timer
class解决了这个问题:

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)显示为新创建的-不闪烁文本字段并向右聚焦。最后……)

嗯…,所以在这种情况下不能很好地使用
ComponentListener
。所以现在我手动设置
textField.setText(null)对于对话框窗口中的每个组件,在将其设置为不可见之前。必须计算一些,特别是低级别侦听器可以是异步的,没有焦点,焦点是最…记录外文本字段之一。setText(null);!=JDialod.revalidate()&JDialog.repaint(),关于repaint()的一切是的,我还必须做
textField.repaint()-在将其父级设置为不可见之前,仅清除文本是不够的。可能是这样,那么您没有考虑动画-->在一秒钟/半秒钟内淡出,因为在这短时间内将执行多少事件,我的问题是Java(目标)版本是什么?Java版本是1.7.0_25-b16。是的,淡出是一个好主意,但在这个特殊的设计中,我根本不想这样做。但是在我的自定义弹出菜单上,鼠标上的菜单项进入/退出的行为非常好。我看到(.Net,C++)通过用模拟表单的图像替换表单,然后图像淡出,幻觉,幻觉,没有人能捕捉到