我有一個廣泛的Gui,其中包含許多組件。有一個updateEnable()
方法根據某些配置更新所有組件的啓用狀態。Java Swing:防止組件更新啓用狀態,直到我告訴它們爲
我基本上第一次設置其啓動狀態爲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。
我是否缺少這個問題的一個非常優雅的替代解決方案?
非常感謝, 斯特凡
你可以找到你的答案[這裏](http://stackoverflow.com/questions/4065456/prevent-java-from-repainting-the-content-of-a-jpanel-while-updating)。 – Grims
謝謝,那正是我正在尋找的。我想起了一種更優雅的方式。如果效果很好,我會發佈一個答案。 – brimborium
好吧,我剛剛發佈我的當前解決方案,並接受它,因爲它似乎對我工作得很好。 mgarins緩存想法也是一種可能性,儘管我不喜歡創建包含我的gui的每個組件的Map。我的方法只會創建一套我認爲更好的特例。 – brimborium