我已将ComponentListener
添加到JTextField
家长,如下所示:
parent.addComponentListener(new ComponentAdapter() {
@Override
public void componentHidden(ComponentEvent e) {
setText("");
}
});
因此,在父项变为不可见后,textField
文本将设置为“”。一切正常,但问题是当我将父设置为可见时 - 在几毫秒内显示textField
的前一个文本,然后字段变为空。所以它不是很好..
答案 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并向右聚焦。最后.. :))