Не обновляется дерево после изменения L&F программно

Рейтинг: 1Ответов: 1Опубликовано: 28.01.2011

У меня есть маленькая программка, в которой есть дерево и кнопка "Изменить Look&Feel" (кроме дерева и этой кнопки ничего нет). Когда пользователь нажимает эту кнопку открывается диалоговое окно, где предлагается выбрать один из имеющихся в системе L&F. По закрытию диалога Look&Feel применяется к приложению. Но есть такая проблема: ноды в дереве не обновляются с одного L&F на другой. В частности, это иногда приводит к тому, что ноду не хватает места при новом L&F и часть его просто не видно.

Это код cell renderer'a:

class FileTreeCellRenderer implements TreeCellRenderer {
  public Component getTreeCellRendererComponent(JTree tree, Object value, 
                   boolean selected, boolean expanded, 
                   boolean leaf, int row, boolean hasFocus) {
    JPanel panel = new JPanel();
    JLabel label = new JLabel();
    if (value instanceof DefaultMutableTreeNode) {
      DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) value;
      Object object = treeNode.getUserObject();
      if (object instanceof MyDocumentClass) {
        label.setText(((MyDocumentClass) object).getTitle());
      } else {
        label.setText("package");
      }
      label.setIcon(Icons.TREE_ITEM_ICON);
      panel.add(label);
    }
    return panel;
  }
}

Вот так получаю доступные L&F:

UIManager.LookAndFeelInfo[] lf = UIManager.getInstalledLookAndFeels();

А вот так применяю выбранный пользователем L&F:

try {
  UIManager.LookAndFeelInfo selected = (LookAndFeelItem) comboBox.getSelectedItem() 
  UIManager.setLookAndFeel(selected.getClassName()); 
} catch (Throwable t) { 
  t.printStackTrace();
}

Ответы

Ответов пока нет.