上次的List没有滚动条,这次把滚动条加上。JList本身是没有这个滚动条的,这个滚动条是JScrollPane的。
滚动条是JScrollBar,
JScrollBar又分为三个部分。分别是1) Button,就是滚动条两边的箭头。 2)thumb,就是滚动条上的划块。 3)Track,就是划块下面的轨迹条,
不知道专业名称叫什么,就叫滑动槽好了。 =。=!
JScrollBar定制就是对这三个的定制。
直接看看效果图:
来看XML配置:
1、给JScrollPane指定边框
<style id="scrollpanel">
<imagePainter method="ScrollPaneBorder" path="resources/images/textfield.png"
sourceInsets="4 6 4 6" paintCenter="false"/>
<insets top="4" left="6" bottom="4" right="6"/>
</style>
<bind style="scrollpanel" type="region" key="ScrollPane"/>
2、给JScrollBar的箭头按钮指定边框及背景。
<style id="ScrollBar button">
<opaque value="TRUE" />
<state>
<color value="#00FF00" type="BACKGROUND" />
</state>
<imagePainter method="ArrowButtonBorder" path="resources/images/arrow.png"
sourceInsets="2 2 2 2" paintCenter="true"/>
<insets top="2" left="2" bottom="2" right="2"/>
</style>
<bind style="ScrollBar button" type="name" key="ScrollBar.button"/>
这里注意的是,bind时的类型是name,通过名称绑定。可以看到上图的箭头按钮被换成了定制的图片。
这里比较别扭的是,好像不能按照箭头的方向指定不同的外观,所以上图中下面的按钮箭头也是朝上的。
比较好的做法是实现 SynthPainter 中的 paintArrowButtonBackground 及 paintArrowButtonBorder 两个函数,
再根据箭头的方向,状态(鼠标是否在上面MOUSE_OVER)进行绘制。这个后面再做,这次就不做了。
3、指定Thumb外观(颜色及边框)
<style id="ScrollBar thumb">
<opaque value="TRUE" />
<state>
<color value="#6FFFF0" type="BACKGROUND" />
</state>
<imagePainter method="ScrollBarThumbBorder" path="resources/images/textfield.png"
sourceInsets="2 2 2 2" paintCenter="false"/>
<insets top="2" left="2" bottom="2" right="2"/>
</style>
<bind style="ScrollBar thumb" type="region" key="ScrollBarThumb"/>
4、指定Track部分的外观
<style id="ScrollBarTrack">
<opaque value="TRUE" />
<state>
<color value="#FF00FF" type="BACKGROUND" />
</state>
</style>
<bind style="ScrollBarTrack" type="region" key="ScrollBarTrack"/>
5、指定JScrollBar的背景
<style id="ScrollBar">
<opaque value="TRUE" />
<state>
<color value="#FF0000" type="BACKGROUND" />
</state>
</style>
<bind style="ScrollBar" type="region" key="ScrollBar"/>
JScrollBar的背景其实可以不用指定,因为一般是看不到的,当然如果你没有指定上面的Button部分,那么在箭头的位置就是显示的JScrollBar的背景颜色,
一个红色的方块。如果没有指定Track的外观,那么实际Track部分显示的就是JScrollBar的背景颜色。