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

时间:2013-08-20 18:10:09

标签: java swing jtextfield componentlistener

我已将ComponentListener添加到JTextField家长,如下所示:

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

因此,在父项变为不可见后,textField文本将设置为“”。一切正常,但问题是当我将父设置为可见时 - 在几毫秒内显示textField的前一个文本,然后字段变为空。所以它不是很好..

1 个答案:

答案 0 :(得分:1)

在将父级设置为不可见之前,textField字段设置为textField.setText(null);(无需重新绘制),然后问题是焦点 - 必须将其设置为某些初始组件,如{{1} }。但重点并不总是及时确定。所以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(); 显示为新创建的话,则显示对话窗口(父级) - 不闪烁textFields并向右聚焦。最后.. :))