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++)通过用模拟表单的图像替换表单,然后图像淡出,幻觉,幻觉,没有人能捕捉到