Java Swing - установить непрозрачность для всех дочерних компонентов? - PullRequest
3 голосов
/ 02 октября 2011

У меня есть некоторые компоненты Swing с детьми. Когда я setOpaque(false) на родителя, дети все еще имеют непрозрачность.

Итак, я взломал эту функцию (спасибо пользователям SOF):

Component[] comps = this.getComponents();

for(Component c : comps) { if(c instanceof JComponent) {
    ((JComponent)c).setOpaque(false); }
}

Но теперь меня мучает неуверенность в себе - это кажется неуклюжим, есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 02 октября 2011

Вы можете добавить ContainerListener на панель и установить непрозрачность дочерних элементов при их добавлении.

Однако ни это, ни ваше решение не будет обрабатывать вложенные панели.

Нетпростое решение, которое я знаю.

0 голосов
/ 18 января 2013

Твой путь в порядке. Немного лучше это:

public void setOpaqueForAll(JComponent aComponent, boolean isOpaque) {
  aComponent.setOpaque(isOpaque);
  Component[] comps = aComponent.getComponents();
  for (Component c : comps) {
    if (c instanceof JComponent) {
      setOpaqueForAll((JComponent) c, isOpaque);
    }
  }
}

Но вам нужно каждый раз вызывать этот метод, если изменилось дерево компонентов.

...