问题说明

在更新最新的JDK 1.8_60后,遇到一个Bug:Nimbus L&F下滚动条在内容很多时不显示滑块了。

这个问题只会在Nimbus L&F下才会出现,而默认的Metal L&F则没有问题。一看到这个问题,我就想是不是设置一下滑块的最小大小就行了,但是经过反复查看代码,基本肯定这个最小大小是存在的,是new Dimension(29, 1),但是具体原因在我看了很久的源码后也没有弄明白。

解决方案

自己找不到办法解决方案了,我在stackoverflow上发帖找到了答案:

http://stackoverflow.com/questions/32857372/jscrollbar-dont-show-thumb-in-nimbus-lf

简单来说,就是要给滑块设置最小大小,跟我开始的设想是一样的,只是我以为源码中已经有了最小大小设置,没想到还可以再设置一下。

UIManager.getDefaults().put("ScrollBar.minimumThumbSize", new Dimension(29, 1));

如果你将滑块的最小高度设置成1的话,滑块可能会变得非常小。所以我会又把最小高度设置成默认的29了。这在我的笔记本上是能够正确运行的。可是,当我换了一台电脑,1和29这两个数值都无效,滑块还是不见了。这时,我尝试把最小大小调大,直到35滑块出现了。对于这个现象,我无法解释其中的原因,如果你也遇到和我类似的情况,而且35不管用的话,再调大一些试试吧。

吐槽

本公司的一个产品是Applet模式,每次JDK升级都心惊肉跳,而且经常都会出现事儿。JDK7的时候是安全问题,频繁的安全补丁更新基本上都导致我们的Applet无法启动,又要增加某个权限设置或者签名设置,要用户将网站加入Java的信任站点等,而至今用户使用时也还会遇到一些安全警告。到了JDK8的时代,就是以前能够运行的Swing和JavaFX代码,各种不能运行,有些是JavaFX API升级,有些就莫名其妙的Bug。所以,公司产品选取技术一定要成熟要流行要有社区!

发表评论

邮箱地址不会被公开。 必填项已用*标注