多くのコンポーネントを含む広範な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が更新されないようにする方法がわかりません。
この問題に対する非常に洗練された代替ソリューションがありませんか?
どうもありがとう、ステファン