Изменить цвет WindowsPlacesBar в JFileChooser - PullRequest
0 голосов
/ 11 августа 2009

Это дополнительный вопрос к моему предыдущему:

Требуется FileDialog с фильтром типов файлов в Java

У меня есть JFileChooser (использующий его вместо FileDialog, чтобы у меня был фильтр типов файлов), и мне удалось довольно прилично стилизовать его под наш вариант более темной цветовой схемы, за исключением той маленькой панели слева. Я наконец-то понял, что сверху был «ToolBar.background», но я понятия не имею, как это называется.

Помощь

альтернативный текст http://img151.imageshack.us/img151/6816/filedialog.jpg

Ответы [ 2 ]

0 голосов
/ 12 августа 2009

Я в итоге выяснил, что имя свойства, посмотрев в исходном коде для WindowsPlacesBar:

Color bgColor = new Color(UIManager.getColor("ToolBar.shadow").getRGB());
setBackground(bgColor);

Я установил ToolBar.shadow, но ничего не изменилось. Дальнейшее изучение в конечном итоге помогло мне понять, что свойство XPStyle.subAppName переопределяет все, что я вставил. Я добавил этот фрагмент кода:

JFileChooser chooser = new JFileChooser();
setWindowsPlacesBackground( chooser );

private void setWindowsPlacesBackground( Container con ) {
  Component[] jc = con.getComponents();
  for( int i = 0; i < jc.length; i++ ) {
    Component c = jc[i];
    if( c instanceof WindowsPlacesBar ) {
      ((WindowsPlacesBar) c).putClientProperty("XPStyle.subAppName", null);
      return;
    }
    if( c instanceof Container ) {
      setWindowsPlacesBackground( (Container)c );
    }
  }
}

Сняв это свойство, он позволил моим цветам и схемам проявиться. Я все еще чувствую, что должен быть более чистый способ его сброса, чем перебор контейнеров, но я не смог его найти. Казалось, что WindowsPlacesBar всегда был первым компонентом в FileChooser. Я собираюсь оставить это открытым еще на день или два на тот случай, если кто-нибудь еще покажет мне что-нибудь более «элегантное».

0 голосов
/ 11 августа 2009

Я не знаю, как изменить его цвет, но я знаю, как от него избавиться:

UIManager.put("FileChooser.noPlacesBar", Boolean.TRUE);

Или, если вы действительно хотите, чтобы панель отображалась, возможно, вы ищете исходный код, чтобы увидеть, как эта панель создается, чтобы увидеть, возможно ли какое-либо переопределение цвета по умолчанию.

...