많은 구성 요소가있는 방대한 Gui가 있습니다. 일부 구성을 기반으로 모든 구성 요소의 활성화 상태를 업데이트하는 방법은 updateEnable()
입니다.자바 스윙 : 구성 요소가 내가 말할 때까지 사용 가능 상태로 업데이트하지 못하도록하십시오.
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);
}
}
나는 그런 식으로 그것을 할 이유는 일부 구성 요소가 저장되지 않는 것입니다 :
는 기본적으로 내가 먼저 true로 상태를 활성화 한 다음 (구성에 따라) 그들 중 일부를 사용하지 않도록 설정 멤버 변수와 나는 그것들에 접근 할 수 없다. 나는이 같은 그들 중 일부를 초기화 때문에 그들은 그러나 (예를 들어) 자신의 상태를 변경할 수 있습니다 : 나는updateEnable()
를 호출하는 경우가 있기 때문에 (저장) 구성 요소의 일부가 깜박일 수 있습니다 :
이제
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를 방지 한 다음 updateUI()
을 수행하는 것입니다. 그러나 이것은 매우 우아하지 않고 GUI 업데이트를 방지하는 방법을 알지 못합니다.
이 문제에 대한 매우 우아한 대체 솔루션이 누락 되었습니까?
덕분에 많이, 스테판
[여기] (http://stackoverflow.com/questions/4065456/prevent-java-from-repainting-the-content-of-a-jpanel-while-updating)에서 답을 찾을 수 있습니다. – Grims
고마워, 그게 내가 찾고 있었던 바로 그거야. 더 우아한 방법에 대한 아이디어가 내 마음에 왔지만. 잘 작동하면 답변을 게시 할 것입니다. – brimborium
좋아, 지금 내 현재 솔루션을 게시하고 그것이 나를 위해 잘 작동하는 것으로 받아 들였다. 내가 gui의 모든 구성 요소를 포함하는 맵을 생성하고 싶지는 않지만 캐러린 아이디어도 가능합니다. 내 접근 방식은 내가 생각하는 특수한 경우 만 생성합니다. – brimborium