4.3 JLabel类
我们要近距离查看的第一个真正的Swing组件就是最简单的JLabel。JLabel用作AWT Label的替换组件,但是所能做的事情更多。AWT Label仅限制为单行文本,JLabel可以是文本,图片,或者是两者都有。文本可以是单行文本也可以是HTML文本。另外,JLabel可以支持不同 的允许与禁止的图片。图4-6显示了一些示例JLabel组件。
4.3.1 创建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.3.2 JLabel属性
表4-8显示了JLabel的14个属性。这些属性允许我们定制JLabel的内容,位置以及行为。
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显示了各种文本属性设置,通过图标反应这些设置。
4.3.3 JLabel事件处理
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);