JAVA GUI界面美化 使用Quaqua仿MAC(苹果)主题LookAndFeel经验分享

    技术2022-07-11  73

    刚在课程实训中写完了一个JAVA调用c++dll动态链接库的程序之后,想要对GUI界面进行美化,于是到网上搜了一圈各种jar包,发现了这个仿MAC主题的Quaqua,但是果不其然这个是开发给MAC系统使用的,但是看到好多人也用在windows系统上,于是抱着试一试的想法就开始用了。

    1.到它的发布网站去下载Quaqua.zip

    这个是它的发布主页,然后我们可以看到在右边有它的最新版是9.1版本,并且上面的文字描述我们可以看出作者已经不再提供更新了,最后一个版本时间是在2014年,相隔甚远,这里下载的时候可能会遇到问题,比如一直获取资源中,我是先复制下载链接,然后用百度网盘离线下载下来,之后再下载到本地,不得不说百度网盘的离线下载还是很OK的! 然后下一步就是怎么使用的问题,这是它提供的帮助说明,简单看一下就是把一个jar包放到classpath,然后第二个是非必需的(因为在第一项中会自动加载),第三个就是把三个库文件放到library path中(这里有问题,稍后再说),最后给了你一段示例代码如何调用。

    2.按照说明放文件

    首先把下载的zip解压出来然后找到Quaqua->dist文件夹下,这里就有我们需要的jar包以及三个库文件(lib开头),首先把jar文件导入到你项目的build path中(Eclipse右键项目->Properties->Java Build Path->Libraries->Add External JARs->选择这个jar文件然后apply就行了)第一步大功告成,然后我就直接开始用官方文档给的示例代码测试。

    System.setProperty( "Quaqua.tabLayoutPolicy","wrap" ); // set the Quaqua Look and Feel in the UIManager try { // 这句是必须要的,因为要先把原来默认的格式去掉(示例代码并没有给出导致我也是搞了好久) JFrame.setDefaultLookAndFeelDecorated(true); UIManager.setLookAndFeel( ch.randelshofer.quaqua.QuaquaManager.getLookAndFeel() ); } catch (Exception e) { // take an appropriate action here e.printStackTrace(); } // 这里随便调用一个界面就可以看到效果了 loginFrame loginframe= new loginFrame(); loginframe.setVisible(true);

    然后我发现现在已经可以显示出正确的仿MAC界面了

    3.发现问题

    嗯,非常不错,那我又在想既然已经成功了为什么还要第三步的过程呢? 于是我把程序一遍流程走完就发现问题了,在我遇到有弹窗提示的时候我发现控制台居然报错了!!比如下面这个弹窗(可以看到这个弹窗的边框很明显没有被初始化成仿MAC的界面)

    Warning: class ch.randelshofer.quaqua.osx.OSXApplication couldn't load library "quaqua64.dll". java.lang.UnsatisfiedLinkError: no quaqua64 in java.library.path Warning: class ch.randelshofer.quaqua.osx.OSXApplication couldn't load library "quaqua.dll". java.lang.UnsatisfiedLinkError: no quaqua in java.library.path

    虽然是warning,但是看着这个界面十分的不爽,然后看这个说明发现是找不到quaqua的dll文件,很明显这不就是我刚刚没有进行的第三步吗?于是我把三个库文件放到了和jar包相同的目录下,然后发现还是不对,难道这个library path没有包含到这三个文件?于是我把三个库文件放到了java jdk目录下的bin文件中(因为这个文件夹是包含在library path下的),然后继续运行,还是不对,这时候我开始怀疑是不是要新添加一个library path,我无比的郁闷,此时我找到一个方法,尝试直接加载某一个库文件试试,这里调用了load方法加载。

    System.load("D:\\newworkspace\\DES\\bin\\libquaqua.jnilib");

    但是问题再一次出现了,居然无法加载!!看一下报错信息。

    Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\newworkspace\DES\bin\libquaqua.jnilib: Can't load this .dll (machine code=0x7) on a AMD 64-bit platform

    意思就是说这个dll文件不能在AMD 64位的平台加载! 这里我突然想到这个作者本意就是给MAC系统用户使用的,然后我去查了一下果不其然MAC电脑是不用AMD处理器的,苍天呐!我辛辛苦苦搞了这么久最后还是以失败告终了。不过,我发现只有在某些界面才会出问题,比如刚才的弹窗界面,还有打开文件的选择界面,目前已知的就这两个,我在查的时候有人说菜单也会有问题,我并没有用到所以不太清楚,但是其实在大部分界面上还是适用的,我们应该知足,毕竟作者本意就不是给windows系统的人用的。

    最后除了这个极其炫酷的仿MAC主题,我还找到了一个swing自带的主题,我用了差不多超过20种主题,都是网上下载的jar包,然后一个个试的,最后发现还不如这个自带的主题好看,如果你觉得上面的MAC主题在你的界面上有很多bug,那么不妨试试这个。

    try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); } loginFrame loginframe= new loginFrame(); loginframe.setVisible(true);

    除此之外还有一些默认的界面都是可以直接调用的,你可以通过下面这个方法获得它们,获取到之后替换上面UIManager中的参数就可以啦!

    // 获取当前系统默认的界面类型 UIManager.LookAndFeelInfo []info=UIManager.getInstalledLookAndFeels() ; for(UIManager.LookAndFeelInfo tem:info) { System.out.println(tem.getClassName()); }

    由于我只是在课程实训阶段做一个小程序,后期优化阶段突然想美化一下,所以这些内容基本就够用啦。

    Processed: 0.009, SQL: 9