繁体   English   中英

在JFileChooser中更改WindowsPlacesBar的颜色

[英]Change color of WindowsPlacesBar in JFileChooser

这是我上一个问题的后续问题:

需要FileDialog和Java中的文件类型过滤器

我有一个JFileChooser(使用它而不是FileDialog,所以我可以有一个文件类型过滤器),我设法为我们的深色方案选择了相当不错的样式,除了左边的小面板。 我最终发现,最上面的是“ ToolBar.background”,但我不知道该叫什么。

救命?

替代文字http://img151.imageshack.us/img151/6816/filedialog.jpg

我不知道如何更改其颜色,但我确实知道如何摆脱它:

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

或者,如果您确实希望显示面板,则可以搜索源代码以查看如何创建该面板,以查看是否有可能覆盖其默认颜色。

我最终通过查看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中的第一个组件。 我将再开放一两天,以防其他人向我展示一些“优雅”的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM