LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 871|回复: 10

用GTK默认L&F提速Java界面应用

[复制链接]
发表于 2009-4-15 21:16:27 | 显示全部楼层 |阅读模式
最近为了达到统一美观的界面效果做了一些小研究。发现采用sun 的nimbus引擎和theme能够做到这一点。swing有内置的nimbus Look and Feel, 但我并不打算用这一点(有字体不统一的问题“,字体我全部采用文泉驿TTF为默认字体。

首先swing里面有一大堆L&F需要简化,用jar命令将jre/lib/rt.jar解开放一个临时目录里,查找并删除 com/sun/java/swing/plaf/目录下的除gtk以外的内容(可以保留了windows, 因为在linux下它并不会被加载);

第二,在jre/lib/目录下添加swing.properties文件(这个文件并不能保证所有java程序都默认加载GTK+ L&F,通常默认的还是Metal, 这个应该是swing的bug)
最后,找到javax/swing/plaf/metal目录,将那几个MetalLookAndFeel*.class删除并用我简化的空类文件替换掉。

=====================================
jar解压命令 jar xf
    显示包内容 jar tf
    压缩包  jar cfm

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2009-4-15 22:04:52 | 显示全部楼层
这儿没Swing 应用呢,不过 mark 下。
回复 支持 反对

使用道具 举报

发表于 2009-4-15 23:55:41 | 显示全部楼层
收藏先。。。有空也折腾一下。
回复 支持 反对

使用道具 举报

发表于 2009-4-16 02:15:10 | 显示全部楼层
能把matlab的swing搞成nimbus么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-16 08:21:03 | 显示全部楼层
Post by zhuqin_83;1975039
能把matlab的swing搞成nimbus么?

这个默认的就是GTK+, 把gtk的theme用nimbus就可以了。如果某程序里面非要指定metal外观,那这个没折,只有靠反编译或者用修改bytecode的工具

其实最好的方案是修改UIManager, 但是其中涉及到sun私藏的一些包不能被编译,只能等sun释出其原代码或者放包了。
回复 支持 反对

使用道具 举报

发表于 2009-4-16 08:41:21 | 显示全部楼层
咋把解压后的文件夹给重新打包呢?
jar cfm rt.jar -C rt
java.io.FileNotFoundException: -C (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:137)
        at java.io.FileInputStream.<init>(FileInputStream.java:96)
        at sun.tools.jar.Main.run(Main.java:149)
        at sun.tools.jar.Main.main(Main.java:1044)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-16 08:55:15 | 显示全部楼层
jar cfm rt.jar rt/META-INF/MANIFEST.MF -C rt/ .

别忘了备份
回复 支持 反对

使用道具 举报

发表于 2009-4-16 08:57:03 | 显示全部楼层
Post by freeobject;1975059
这个默认的就是GTK+, 把gtk的theme用nimbus就可以了。如果某程序里面非要指定metal外观,那这个没折,只有靠反编译或者用修改bytecode的工具

其实最好的方案是修改UIManager, 但是其中涉及到sun私有的一些包不能被编译,只能等sun释出其原代码或者放包了。
试过了,没用。看样子还得试试其他办法。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-16 09:07:15 | 显示全部楼层
Post by zhuqin_83;1975084
试过了,没用。看样子还得试试其他办法。


除非不能加载,要么就可以的。你那边什么输出结果?我这边jedit和microEmulator都是可以的。我没改microE的代码。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2009-4-16 10:59:47 | 显示全部楼层
直接打不开。无所谓了,这东西估计就是用了他自己的主题,非metal。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表