【问题标题】:Is there a way to improve JFileChooser look and feel under Ubuntu?有没有办法在 Ubuntu 下改进 JFileChooser 的外观和感觉?
【发布时间】:2011-02-13 10:10:01
【问题描述】:

我一直在制作一个使用 JFileChooser 的程序。我已经用

设置了应用程序

UIManager.getSystemLookAndFeelClassName()

这对于 Ubuntu 下的几乎所有东西都适用。到目前为止,我遇到的唯一问题是 JFileChooser 看起来非常糟糕:

有没有办法让它看起来像 Ubuntu 中的默认文件选择器? IE。

我试过了

UIManager.getCrossPlatformLookAndFeelClassName()

这使得 JFileChooser 对话框看起来更好,但仍然不是原生的,它也破坏了应用程序的其余部分。

谢谢。

【问题讨论】:

标签: java user-interface swing look-and-feel jfilechooser


【解决方案1】:

如果我没记错的话,普通的 JDK 使用的是 gtk1,但 ubuntu 目前使用的是 gtk2。我忘记了在哪里,但我在某处遇到了 gtk2 for java。谷歌?可能不是您所希望的,抱歉。

【讨论】:

  • 搜索这确实有帮助,我遇到了这个:code.google.com/p/gtkjfilechooser。不知道如何让它跨平台执行,但我会更多地研究它。感谢您的帮助。
  • 您可以按照 jzd 的建议使用 nimbus,并将其作为单独的库添加到您的项目中,并且仅在需要 gtk 原生外观的系统上使用该外观。
【解决方案2】:

您可能会看到FileDialog 是否更有吸引力;这是example

【讨论】:

  • 这对我来说不是很吸引人,但还是感谢您的提示。
【解决方案3】:

Nimbus 的外观和感觉具有不错的文件选择器。虽然这会影响您的整个应用程序,但您可能会喜欢这种外观。

如果需要,您还可以构建自己的文件选择器。

【讨论】:

  • 我认为 Nimbus 仅在 Java 6 更新 10 中添加。我试图避免强制使用特定的 Java 版本(也许能够以某种方式回退?),但我一定会调查一下,谢谢。
  • 在包含在 JRE 中之前,它是一个单独的库,您可以将其包含在您的项目中。这适用于旧版本的 Java。
【解决方案4】:

您也可以使用 SWT 代替 swing。

Does Swing support Windows 7-style file choosers?

以下代码来自以上链接

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;

public class SWTFileOpenSnippet {
    public static void main (String [] args) {
        Display display = new Display ();
        Shell shell = new Shell (display);
        // Don't show the shell.
        //shell.open ();  
        FileDialog dialog = new FileDialog (shell, SWT.OPEN | SWT.MULTI);
        String [] filterNames = new String [] {"All Files (*)"};
        String [] filterExtensions = new String [] {"*"};
        String filterPath = "c:\\";
        dialog.setFilterNames (filterNames);
        dialog.setFilterExtensions (filterExtensions);
        dialog.setFilterPath (filterPath);
        dialog.open();
        System.out.println ("Selected files: ");
        String[] selectedFileNames = dialog.getFileNames();
        for(String fileName : selectedFileNames) {
            System.out.println("  " + fileName);
        }
        shell.close();
        while (!shell.isDisposed ()) {
            if (!display.readAndDispatch ()) display.sleep ();
        }
        display.dispose ();
    }
}

【讨论】:

    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2011-11-13
    • 2019-06-11
    相关资源
    最近更新 更多