我们要近距离查看的第一个真正的Swing组件就是最简单的JLabel。JLabel用作AWT Label的替换组件,但是所能做的事情更多。AWT Label仅限制为单行文本,JLabel可以是文本,图片,或者是两者都有。文本可以是单行文本也可以是HTML文本。另外,JLabel可以支持不同的允许与禁止的图片。图4-6显示了一些示例JLabel组件。
JLabel有6个构造函数:
public JLabel() JLabel label = new JLabel(); public JLabel(Icon image) Icon icon = new ImageIcon("dog.jpg"); JLabel label = new JLabel(icon); public JLabel(Icon image, int horizontalAlignment) Icon icon = new ImageIcon("dog.jpg"); JLabel label = new JLabel(icon, JLabel.RIGHT); public JLabel(String text) JLabel label = new JLabel("Dog"); public JLabel(String text, int horizontalAlignment) JLabel label = new JLabel("Dog", JLabel.RIGHT); public JLabel(String text, Icon icon, int horizontalAlignment) Icon icon = new ImageIcon("dog.jpg"); JLabel label = new JLabel("Dog", icon, JLabel.RIGHT);
通过JLabel的构造函数,我们可以自定义JLabel的三个属性:text, icon或是horizontalAlignment。默认情况下,text与icon属性是空的,而初始的horizontalAlignment属性设置依赖于构造函数的参数。这些设置可以是JLabel.LEFT,JLabel.CENTER或是JLabel.RIGHT。在大多数情况下,没有指定horizontalAlignment会导致左对齐标签。然而,如果仅指定了初始图标,则默认的对齐方式为居中对齐。
表4-8显示了JLabel的14个属性。这些属性允许我们定制JLabel的内容,位置以及行为。
JLabel属性
属性名 |
数据类型 |
访问性 |
accessibleContext |
AccessibleContext |
只读 |
disabledIcon |
Icon |
读写绑定 |
displayedMnemonic |
char |
读写绑定 |
displaydMnemonicIndex |
int |
读写绑定 |
horizontalAlignment |
int |
读写绑定 |
horizontalTextPosition |
int |
读写绑定 |
icon |
Icon |
读写绑定 |
iconTextGap |
int |
读写绑定 |
labelFor |
Component |
读写绑定 |
text |
String |
读写绑定 |
UI |
LabelUI |
读写 |
UIClassID |
String |
只读 |
verticalAlignment |
int |
读写绑定 |
verticalTextPosition |
int |
读写绑定 |
JLabel的内容是文本以及相关联的图片。在一个JLabel内显示图片将会在本章稍后的“接口Icon”一节中进行讨论。然而,我们可以依据于JLabel是允许或是禁止的而显示不同的图标。在默认情况下,如果允许的图标来自一个Image对象(ImageIcon,在本章稍后进行讨论),则允许的图标是灰度平衡的。如果允许图标并不是来自于一个Image,当Jlabel被禁止时则没有图标,除非我们手动指定。
JLabel内容的位置是由四个不同的属性来描述的:horizontalAlignment, horizontalTextPosition, verticalAlignment以及verticalTextPosition。horizontalAlignment与verticalAlignment属性描述了JLabel的内容在其所在的窗口的位置。
水平位置可以是JLabel的LEFT, RIGHT或是CENTER常量。垂直位置可以在TOP, BOTTOM或是CENTER。图4-7显示了各种对齐设置,通过图标显示对齐。
当同时指定了文本与图标时,文本位置属性反应了文本相对于图标的位置。这些属性可以设置为与对齐属性相同的常量。图4-8显示了各种文本属性设置,通过图标反应这些设置。
JLabel并没有特定的事件处理功能。除了通过JComponent继承的事件处理功能以外,JLabel最接近于事件处理的就是displaydMnemonic, displayedMnemonicIndex与labelFor属性的组合使用。
当设置了displayedMnemonic与labelFor属性时,通过配合平台相关的热键按下指定的键时,会使得输入焦点移动到与labelFor属性相关联的组件上。当一个组件并没有自己的方式来显示记忆键设置时,例如所有的输入文本组件,这种用法就十分用。下面是一个演示示例,其运行结果如图4-9所示:
JLabel label = new JLabel("Username"); JTextField textField = new JTextField(); label.setDisplayedMnemonic(KeyEvent.VK_U); label.setLabelFor(textField);
displayedMnemonicIndex属性可以使得所强调的记忆键并不一定是标签文本中的第一个记忆键实例。我们所指定的索引表示文本中的位置,而不是记忆键的实例。要强调Username中的第二个e,我们需要指定索引7:label.setDisplayedMnemonicIndex(7)。
每一个安装的Swing观感都会提供一个同的JLabel外观以及默认的UIResource值设置集合。尽管外观会依据当前的观感而不同,但是在预安装的观感类型集合中区别很小。表4-9显示了JLabel的UIResource相关的属性集合。对于JLabel组件有八个不同的属性。
JLabel UIResource元素
属性字符串 |
对象类型 |
Label.actionMap |
ActionMap |
Label.background |
Color |
Label.border |
Border |
Label.disableForeground |
Color |
Label.disableShadow |
Color |
Label.font |
Font |
Lable.foreground |
Color |
LabelUI |
String |