附加的swing小部件(上)
JComboBox组件
在这一节中,我将介绍 Swing 库中的其他全部组件、如何使用它们、它们看起来是什么样的,等等,这部分内容应当让您更好地了解 Swing 为 UI 开发人员提供了什么。
我们从 JComboBox 开始介绍。组合框与下拉选择相似,区别在于使用组合框时用户可以不从列表中选择项目,还可以选择一个(而且只有一个)项目。在某些版本的组合框中,还可以输入自己的选择。浏览器的地址栏就是一个示例:它是一个允许输入自己选项的组合框。
JComboBox 的重要函数包括 JComboBox 包含的数据。需要有一种方法来设置 JComboBox 中的数据、修改数据、在用户选择时得到用户的选择。可以使用以下 JComboBox 方法:
· addItem():添加一个项目到 JComboBox.
· get/setSelectedIndex():获取/设置 JComboBox 中选中项目的索引。
· get/setSelectedItem():获取/设置选中的对象。
· removeAllItems():从 JComboBox 删除所有对象。
· remoteItem():从 JComboBox 删除特定对象。
JTextField组件
JTextField 的一个细微变化是 JPasswordField,它允许您隐藏在文本字段区域中显示的字符。毕竟,在您输入口令的时候,如果每个人都能看到,那可没什么好处?可能根本就不好,而且在私人数据如此脆弱的今天,您需要所有能够得到的帮助。
JPasswordField 上额外的“安全性”方法对 JTextField 的行为做了轻微改变,所以不能阅读文本:
· get/setEchoChar():获取/设置每次字符输入时在 JPasswordField 中显示的字符。在获取口令时,不会返回“回声”,而是返回实际的字符。
· getText(): 不应当 使用这个函数,因为它会带来可能的安全问题(String 会保存在内存中,可能的堆栈转储会暴露口令)。
· getPassword():这是从 JPasswordField 中获得口令的恰当方法,因为它返回一个包含口令的 char[]。为了保证恰当的安全性,数组应当被清为 0,以确保它不会保留在内存中。
JCheckBox/JRadioButton组件
JCheckBox 和 JRadioButton 组件向用户呈现选项,通常采用多选的格式。区别是什么?从实践的角度来说,它们没有那么不同。它们的行为方式相同。但是,在一般的 UI 实践中,它们有细微差异:JRadioButton 通常组合在一起,向用户呈现带有必选答案的问题,而且这些答案具有强制性(这意味着问题只能有一个答案)。JRadioButton 的行为保证了这个用法。一旦选择了JRadioButton,就不能取消对它的选择,除非选择了在同一组中的另外一个单选钮。从效果上看,这就保证了选项的惟一和必选。JCheckBox 的不同在于,允许随机地选择/取消除选择,并允许为问题选择多个答案。
这里是个示例。问题“您是男孩还是女孩!”有两个惟一答案选项“男孩”或“女孩”。用户必须选择一个,不能同时选中。另一方面,问题“您的习惯是什么?”的答案有“跑步”、“睡觉”或“阅读”,不应当只允许为此问题选择一个答案,因为人们可能有不止一个习惯。
把这些 JCheckBoxe 或 JRadioButton 捆绑成一组的类是 ButtonGroup 类。它允许把选项组织在一起(例如“男孩”和“女孩”),这样,其中一个被选择时,另外一个就自动取消选择。
需要记住的重要的 ButtonGroup 方法是:
· add():添加 JCheckBox 或 JRadioButton 到 ButtonGroup。
· getElements():获得 ButtonGroup 中的全部组件,允许对它们进行迭代,找到其中选中的那个。
JMenu/JMenuItem/JMenuBar组件
JMenu、JMenuItem 和 JMenuBar 组件是在 JFrame 中开发菜单系统的主要构造块。任何菜单系统的基础都是 JMenuBar。它平淡而乏味,但却是必需的,因为每个 JMenu 和 JMenuItem 都要用它构建。要用 setJMenuBar() 方法把 JMenuBar 附着到 JFrame。一旦将它附加到 JFrame 中,就可以添加所有想要的菜单、子菜单和菜单项。
JMenu/JMenuItem 的区别看起来可能很明显,但实际上,在幕后看起来并不像表面那样。看看类的类层次结构,就知道JMenu 是 JMenuItem 的子类。但是,在表面上,它们是有区别的:用 JMenu 包含其他 JMenuItem 和 JMenu;JMenuItem 在选中时触发操作。
JMenuItem 也支持快捷键的概念。与您用过的大多数应用程序一样,Swing 应用程序允许您按下 Ctrl+(某个键)来触发一个操作,就像选中菜单键本身一样。想想用来剪切和粘贴的快捷键 Ctrl+X 和 Ctrl+V。
除此之外,JMenu 和 JMenuItem 都支持访问键。用 Alt 键与某个字母关联,模拟菜单本身的选择(例如,在 Windows 中按下 Alt+F,然后按下 Alt+x 就可以关闭应用程序)。
这些类需要的重要方法是:
· JMenuItem and JMenu:
o get/setAccelerator():获取/设置用作快捷键的 Ctrl+键。
o get/setText():获取/设置菜单的文本。
o get/setIcon():获取/设置菜单使用的图片。
· JMenu 专用:
o add():添加另外一个 JMenu 或 JMenuItem 到 JMenu(创建嵌套菜单)。
JSlider组件
在应用程序中 JSlider 支持数值变化。它是一种迅速而简单的方式,不仅能让用户以可视形式获得他们当前选择的反馈,还能得到可以接受的值的范围。想像一下这种情况:可以提供一个文本字段,允许用户输入值,但是这样做就带来了额外的麻烦,要确保输入的值是数字,还要确保数字符合要求的数值范围。例如,如果有一个金融 Web 站点,它向您提问要在股票上投资的百分比,那么您不得不检查在文本字段中输入的值,以确保它们是数字,而且在 0 到 100 之间。如果换用 JSlider,那么就可以确保选择的是指定范围内的数字。
JSlider 中的重要方法是:
· get/setMinimum():获取/设置可以选择的最小值。
· get/setMaximum():获取/设置可以选择的最大值。
· get/setOrientation():获取/设置 JSlider 是上/下还是左/右滚动条。
· get/setValue():获取/设置 JSlider 的初始值。
JSlider
与 JSlider 非常像,可以用 JSpinner 允许用户选择一个整数值。JSlider 的一个主要优势就是比 JSlider 的空间紧凑。但是,它的不足就是无法方便地设置其边界。
但是,两个组件之间的比较仅此而已。JSpinner 更加灵活,可以用来在任意组的值之间进行选择。除了在数字间选择,它还可以用来在日期、名称、颜色和任何事之间进行选择。这使 JSpinner 极为强大,允许您提供其中只包含预定义的选择的组件。使用这种方式,它与 JComboBox 类似,但是它们的应用不能互换。只应把 JSpinner 用在逻辑上连续的选择 —— 数字和日期是最合逻辑的选择。而另一方面,在呈现看起来随机的选择并且选择之间没有连接的时候,JComboBox 是更好的选择。
重要方法是:
· get/setValue():获取/设置 JSpinner 的初始值,在基本实例中,需要是整数。
· getNextValue():获取按下上箭头按钮之后应当选中的下一个值。
· getPreviousValue():获取按下下箭头按钮之后应当选中的前一个值。
JToolBar
JToolBar 充当其他组件(JButton、JComboBoxe 等)的调色板,共同构成您在大多数应用程序中熟悉的工具栏。工具栏允许程序把常用的命令放在可以迅速发现的位置,并把它们以常用命令组的形式组合在一起。一般(但不总是这样)情况下,工具栏按钮在菜单栏中会有对应的命令。虽然这不是必需的,但已经变成了一种公共实践,您也应当试着这么做。
JToolBar 也提供了您在其他工具栏中看到过的其他功能:“浮动”的能力(也就是成为主帧顶部独立的帧)。
对于 JToolBar,要记住的重要方法是:is/setFloatable(),它获取/设置 JToolBar 是否可以浮动。
JToolTip
您可能到处都看到过 JToolTip,但是从来不知道它们叫什么。它们就像您鞋带上的塑料部件 —— 到处都有,但是您就是不知道它们正确的名字(如果您想知道,那么可以叫它们 金属箍)。JToolTip 就是您将鼠标停留在某个东西上面的时候弹出来的小“泡泡”。它们在应用程序中可能非常有用,可以为难用的项目提供帮助、扩展信息,甚至在拥挤的 UI 中显示某个项目的完整文本。在 Swing 中,可以通过把鼠标放在某个组件上的特定时间来触发它们;它们通常在鼠标处于不活动状态大约 1 秒钟之后显示。只要鼠标还停留在那个组件上,它们就保持可见。
JToolTip 的重要部分是它的易用性。setToolTip() 方法是 JComponent 类中的一个方法,这意味着每个 Swing 组件都能有一个与之关联的工具提示。虽然 JToolTip 本身也是一个 Swing 类,但目前,对于您的需要,它确实没有提供更多功能,而且本身也不该被创建。可以通过调用 JComponent 的 setToolTip() 函数访问和使用它。