我有一个广泛的 Gui,其中包含许多组件。有一种updateEnable()
方法可以根据某些配置更新所有组件的启用状态。
我基本上首先将它们的启用状态设置为 true,然后禁用其中的一些(基于配置):
private void updateEnable() {
enableAllRec(panel, true);
// disable some components
}
private void enableAllRec(Container root, boolean b) {
if (root == null) return;
for (Component c : root.getComponents()) {
c.setEnabled(b);
if (c instanceof Container) enableAllRec((Container) c, b);
}
}
我这样做的原因是某些组件没有存储为成员变量,我无权访问它们。然而,它们可以改变它们的状态,因为我像这样初始化了它们中的一些(例如):
final JLabel exampleLabel = new JLabel("yoink");
final JCheckBox exampleCheckBox = new JCheckBox("boing");
exampleCheckBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
exampleLabel.setEnable(exampleCheckBox.isSelected());
}
});
现在我的问题如下:当我调用时updateEnable()
,一些(存储的)组件可能会闪烁,因为它们被启用,然后在一段时间后再次禁用。我想防止这种情况发生。我的想法是以某种方式阻止 GUI 刷新,直到结束,updateEnable()
然后执行updateUI()
. 但这不是很优雅,我不知道如何防止 GUI 更新。
我是否错过了一个非常优雅的替代解决方案来解决这个问题?
非常感谢,斯特凡