JFileChooser 上的窗口外观布局比其他外观和感觉像 nimbus 好得多。
所以我正在寻找一种方法来拥有系统外观和感觉的布局,但在顶部有 nimbus 或其他主题。
这可能吗?如果是这样,怎么办?
JFileChooser 上的窗口外观布局比其他外观和感觉像 nimbus 好得多。
所以我正在寻找一种方法来拥有系统外观和感觉的布局,但在顶部有 nimbus 或其他主题。
这可能吗?如果是这样,怎么办?
这是可能的,虽然我不知道是否推荐。我设法通过要求视图在除最顶层 JFileChooser 组件之外的所有组件上更新自身来使其工作(因为这会将所有选择器组件替换为您不想要的 Nimbus 组件)。
我认为这是一种可能会或可能不会工作的黑客,具体取决于 Windows 外观和感觉的内部结构。它几乎依赖于由 Swing 组件构建的整个 JFileChooser。如果它被更改为使用更直接的本机渲染(即 Java 要求 Windows 绘制选择器的重要部分),它将无法工作。不知道该技巧与其他组件的效果如何。
无论如何,这段代码似乎适用于 JDK 7:
package test;
import java.awt.Component;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.UIManager;
import javax.swing.plaf.nimbus.NimbusLookAndFeel; //Or use com.sun.... if you are using JDK < 7
public class LAFTester
{
public static void main(String... args)
throws Exception
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JFileChooser chooser = new JFileChooser();
chooser.updateUI(); //Create UI objects
UIManager.setLookAndFeel(NimbusLookAndFeel.class.getName()); //Now set look and feel
//UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); //works with metal as well
refreshUI(chooser, false);
chooser.showOpenDialog(null);
}
private static void refreshUI(JComponent c, boolean includeParent)
{
if (includeParent)
c.updateUI();
for (int i = 0; i < c.getComponentCount(); i++)
{
Component child = c.getComponent(i);
if (child instanceof JComponent)
{
refreshUI((JComponent)child, true);
}
}
}
}
我假设您正在谈论 Windows 文件选择器对话框左侧的面板,其中有Desktop
,My Computer
My Documents
图标?
好吧,我怀疑这是否可以做到,因为这是 LAF 特有的。这被添加到 Windows LAF 中,因为这就是 Windows 平台文件选择的样子。其他 LAF 不支持此功能。