用JIcon装饰你的界面(二)

2014-11-23 20:27:43 · 作者: · 浏览: 24
onHeight()方法时,返回这些值。宽度和高度是作为图标列表的最大值通过calculateSize()方法计算的,当列表内容发生改变时,就会调用该方法。

我们也保留当前图标和索引值来反映当前选择的状态。当paintIcon()方法在Icon接口被调用时,就会绘制所选择的图标。如果有必要,我们还提供了一个setIcons()方法来设置整个列表的内容。两个构造器中的第二个构造器在初试化时用该方法来设置列表。另一个构造器是空的,需要在一个单独的步骤中填充列表。调用addIcon()或removeIcon()方法时,也会调用calculateSize()和fireChangeEvent()方法。我们运用了一个实用的方法(capIndex())来确保当前索引值永远不会超过列表的大小。FireChangeEvent()、addChangeListener()和removeChangeListener()方法管理注册的ChangeListener的列表。

突出焦点
缺省情况下,在JIcon类中,我们用一个单独的像素EmptyBorder环绕在图标周围,这样我们就可以用一个蓝色的LineBorder来重点显示图标了。你可以调用setFocusable()方法来激活该行为。缺省情况下,我们可以处理鼠标事件(mouse event),但不接受聚焦显示。通过三个构造器我们可以创建一个空的JIcon、带有一个单独的图标的JIcon或带有一个初始Icon列表的JIcon。在每种情况中,我们都用initComponent()方法来设置可选的美学效果和监听器(listener)。

JIcon实现了四个监听器:ChangeListener、FocusListener、MouseListener和KeyListener。触发ChangeListener事件可以重画视图。我们用了一个叫做resetSize()的方法,因为模式的变化会影响由组件返回的首选的、最小的尺寸。实际的尺寸是由IconList缓存的,当图标被添加或删除时,IconList就会计算实际尺寸,因此首选的、最小的尺寸