这些Java教程是为JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及后续版本中更新的语言特性的概述。
请参阅JDK发行说明,了解所有JDK版本的新功能、增强功能以及已删除或不推荐的选项的信息。
要创建一个按钮,您可以实例化从AbstractButton
类继承的许多类之一。下表显示了您可能想使用的Swing定义的AbstractButton
子类:
类 | 概要 | 描述位置 |
---|---|---|
JButton |
一个常见的按钮。 | 如何使用常见按钮API和如何使用JButton功能 |
JCheckBox |
一个复选框按钮。 | 如何使用复选框 |
JRadioButton |
一组单选按钮之一。 | 如何使用单选按钮 |
JMenuItem |
菜单中的项。 | 如何使用菜单 |
JCheckBoxMenuItem |
具有复选框的菜单项。 | 如何使用菜单和如何使用复选框 |
JRadioButtonMenuItem |
具有单选按钮的菜单项。 | 如何使用菜单和如何使用单选按钮 |
JToggleButton |
实现JCheckBox 和JRadioButton 继承的切换功能。可以实例化或继承以创建两态按钮。 |
在一些示例中使用 |
首先,本节介绍了AbstractButton
定义的基本按钮API,因此所有的Swing按钮都具有这些API。接下来,它描述了JButton
向AbstractButton
添加的少量API。然后,本节将向您展示如何使用专门的API来实现复选框和单选按钮。
下面是一个显示三个按钮的应用程序的图片:
正如ButtonDemo
示例所示,Swing按钮可以同时显示文本和图像。在ButtonDemo
中,每个按钮的文本相对于其图像有不同的位置。每个按钮文本中的下划线字母显示了每个按钮的键盘替代键(即助记符)。在大多数外观中,用户可以通过按下Alt键和助记符来点击按钮。例如,在ButtonDemo中,Alt-M将点击中间按钮。
当按钮被禁用时,外观会自动生成按钮的禁用外观。但是,您可以提供一个替代普通图像的图像。例如,您可以提供灰色版本的左侧和右侧按钮使用的图像。
如何实现事件处理取决于您使用的按钮类型和使用方式。通常,您需要实现一个动作监听器,每当用户点击按钮时,该监听器就会被通知。对于复选框,通常会使用一个项目监听器,它在选中或取消选中复选框时被通知。
以下是来自ButtonDemo.java
的代码,它创建了前面示例中的按钮并对按钮点击作出反应。加粗的代码是如果按钮没有图像时保留的代码。
//在初始化代码中: ImageIcon leftButtonIcon = createImageIcon("images/right.gif"); ImageIcon middleButtonIcon = createImageIcon("images/middle.gif"); ImageIcon rightButtonIcon = createImageIcon("images/left.gif"); b1 = new JButton("禁用中间按钮", leftButtonIcon); b1.setVerticalTextPosition(AbstractButton.CENTER); b1.setHorizontalTextPosition(AbstractButton.LEADING); //对于从左到右的语言环境来说,也可以使用AbstractButton.LEFT b1.setMnemonic(KeyEvent.VK_D); b1.setActionCommand("disable"); b2 = new JButton("中间按钮", middleButtonIcon); b2.setVerticalTextPosition(AbstractButton.BOTTOM); b2.setHorizontalTextPosition(AbstractButton.CENTER); b2.setMnemonic(KeyEvent.VK_M); b3 = new JButton("启用中间按钮", rightButtonIcon); //使用默认的文本位置:CENTER, TRAILING (RIGHT) b3.setMnemonic(KeyEvent.VK_E); b3.setActionCommand("enable"); b3.setEnabled(false); //监听按钮1和按钮3的动作。 b1.addActionListener(this); b3.addActionListener(this); b1.setToolTipText("单击此按钮禁用中间按钮。"); b2.setToolTipText("单击此中间按钮时不会发生任何操作。"); b3.setToolTipText("单击此按钮启用中间按钮。"); ... } public void actionPerformed(ActionEvent e) { if ("disable".equals(e.getActionCommand())) { b2.setEnabled(false); b1.setEnabled(false); b3.setEnabled(true); } else { b2.setEnabled(true); b1.setEnabled(true); b3.setEnabled(false); } } protected static ImageIcon createImageIcon(String path) { java.net.URL imgURL = ButtonDemo.class.getResource(path); ...//为了清晰起见,省略了错误处理... return new ImageIcon(imgURL); }
普通按钮 - JButton
对象 - 比AbstractButton
类提供的功能稍微多一点:你可以使一个JButton
成为默认按钮。
在顶级容器中,最多只能有一个按钮是默认按钮。默认按钮通常具有突出的外观,并且当顶级容器具有键盘焦点且用户按下回车键时,它会被点击。下面是一个对话框的图片,实现在ListDialog示例中,其中的Set按钮是默认按钮:
你可以通过在顶级容器的根窗格上调用setDefaultButton
方法来设置默认按钮。下面是为ListDialog
示例设置默认按钮的代码:
//在JDialog子类的构造函数中: getRootPane().setDefaultButton(setButton);
默认按钮功能的具体实现取决于外观和感觉。例如,在Windows外观和感觉中,默认按钮会更改为具有焦点的按钮,这样按下回车键就会点击焦点按钮。当没有按钮获得焦点时,你最初指定的默认按钮会重新变为默认按钮。
JCheckBox
类提供了对复选框按钮的支持。你还可以使用菜单中的JCheckBoxMenuItem
类来放置复选框。因为JCheckBox
和JCheckBoxMenuItem
继承自AbstractButton
,所以Swing复选框具有所有通常的按钮特性,正如本节前面讨论的那样。例如,你可以指定在复选框中使用的图像。
复选框与单选按钮类似,但它们的选择模型是不同的。按照约定,一组复选框中的任意数量的复选框 - 零个、一些或全部 - 可以被选择。而单选按钮组只能选择一个按钮。
下面是一个使用四个复选框来自定义卡通的应用程序的图片:
每次单击复选框,都会生成一个项目事件和一个动作事件。通常,只监听项目事件,因为它们能让您确定单击是选中还是取消选中复选框。下面是来自CheckBoxDemo.java
的代码,该代码创建了前面示例中的复选框并响应单击事件。
//在初始化代码中: chinButton = new JCheckBox("Chin"); chinButton.setMnemonic(KeyEvent.VK_C); chinButton.setSelected(true); glassesButton = new JCheckBox("Glasses"); glassesButton.setMnemonic(KeyEvent.VK_G); glassesButton.setSelected(true); hairButton = new JCheckBox("Hair"); hairButton.setMnemonic(KeyEvent.VK_H); hairButton.setSelected(true); teethButton = new JCheckBox("Teeth"); teethButton.setMnemonic(KeyEvent.VK_T); teethButton.setSelected(true); //为复选框注册侦听器。 chinButton.addItemListener(this); glassesButton.addItemListener(this); hairButton.addItemListener(this); teethButton.addItemListener(this); ... public void itemStateChanged(ItemEvent e) { ... Object source = e.getItemSelectable(); if (source == chinButton) { //...做一些处理... } else if (source == glassesButton) { //...做一些处理... } else if (source == hairButton) { //...做一些处理... } else if (source == teethButton) { //...做一些处理... } if (e.getStateChange() == ItemEvent.DESELECTED) //...做一些处理... ... updatePicture(); }
单选按钮是一组按钮,根据惯例,每次只能选择一个按钮。Swing版本支持使用JRadioButton
和ButtonGroup
类创建单选按钮。要将单选按钮放置在菜单中,请使用JRadioButtonMenuItem
类。其他显示多选一选择的方式包括下拉框和列表。单选按钮的外观与复选框类似,但是根据惯例,复选框可以同时选择多个选项。
因为JRadioButton
继承自AbstractButton
,所以Swing单选按钮具有所有通常的按钮特性,正如本节前面讨论的那样。例如,您可以指定在单选按钮中显示的图像。
这是一个使用五个单选按钮的应用程序的图片,让您可以选择显示哪种宠物:
每当用户点击单选按钮(即使已经选中),按钮都会触发一个动作事件。还会发生一到两个项目事件,一个来自刚刚选中的按钮,另一个来自失去选中的按钮(如果有)。通常,您使用动作监听器来处理单选按钮的点击。
下面是从RadioButtonDemo.java
中创建之前示例中的单选按钮并响应点击的代码。
//在初始化代码中: //创建单选按钮。 JRadioButton birdButton = new JRadioButton(birdString); birdButton.setMnemonic(KeyEvent.VK_B); birdButton.setActionCommand(birdString); birdButton.setSelected(true); JRadioButton catButton = new JRadioButton(catString); catButton.setMnemonic(KeyEvent.VK_C); catButton.setActionCommand(catString); JRadioButton dogButton = new JRadioButton(dogString); dogButton.setMnemonic(KeyEvent.VK_D); dogButton.setActionCommand(dogString); JRadioButton rabbitButton = new JRadioButton(rabbitString); rabbitButton.setMnemonic(KeyEvent.VK_R); rabbitButton.setActionCommand(rabbitString); JRadioButton pigButton = new JRadioButton(pigString); pigButton.setMnemonic(KeyEvent.VK_P); pigButton.setActionCommand(pigString); //将单选按钮分组。 ButtonGroup group = new ButtonGroup(); group.add(birdButton); group.add(catButton); group.add(dogButton); group.add(rabbitButton); group.add(pigButton); //为单选按钮注册监听器。 birdButton.addActionListener(this); catButton.addActionListener(this); dogButton.addActionListener(this); rabbitButton.addActionListener(this); pigButton.addActionListener(this); ... public void actionPerformed(ActionEvent e) { picture.setIcon(new ImageIcon("images/" + e.getActionCommand() + ".gif")); }
对于每组单选按钮,您需要创建一个ButtonGroup
实例,并将每个单选按钮添加到其中。当用户在组中选择另一个按钮时,ButtonGroup
会取消选择先前选中的按钮。
通常应初始化一组单选按钮,以确保其中一个被选中。然而,API不强制执行此规则 - 一组单选按钮可以没有初始选择。一旦用户进行了选择,从那时起将只有一个按钮被选中。
以下表格列出了常用的按钮相关的API。您可能会调用其他方法,比如setFont
和setForeground
,这些方法在JComponent类的API表格中列出。
使用按钮的API分为以下几个类别:
设置或获取按钮的内容JButton(Action)JButton
void setAction(Action)
Action
void setText(String)
setRolloverIcon(someIcon)
setRolloverSelectedIcon
setRollover(true)
AbstractButton
RIGHT
LEFT
CENTER
LEADING
TRAILING
TOP
CENTER
BOTTOM
void setHorizontalTextPosition(int)
AbstractButton
LEFT
CENTER
RIGHT
LEADING
TRAILING
TOP
CENTER
BOTTOM
void setMargin(Insets)
setMnemonic
int
KeyEvent.VK_X
void setDisplayedMnemonicIndex(int)
构造函数 | 目的 |
---|---|
JCheckBox(Action) JCheckBox(String) JCheckBox(String, boolean) JCheckBox(Icon) JCheckBox(Icon, boolean) JCheckBox(String, Icon) JCheckBox(String, Icon, boolean) JCheckBox() |
创建一个JCheckBox 实例。字符串参数指定复选框应显示的文本(如果有)。类似地,Icon 参数指定应使用的图像,而不是外观的默认复选框图像。将布尔参数指定为true 可初始化复选框为选中状态。如果布尔参数缺失或为false ,则复选框最初为未选中状态。 |
JCheckBoxMenuItem(Action) JCheckBoxMenuItem(String) JCheckBoxMenuItem(String, boolean) JCheckBoxMenuItem(Icon) JCheckBoxMenuItem(String, Icon) JCheckBoxMenuItem(String, Icon, boolean) JCheckBoxMenuItem() |
创建一个JCheckBoxMenuItem 实例。参数的解释与JCheckBox 构造函数的参数解释相同,只是任何指定的图标都会显示在正常复选框图标的旁边。 |
构造函数 | 目的 |
---|---|
JRadioButton(Action) JRadioButton(String) JRadioButton(String, boolean) JRadioButton(Icon) JRadioButton(Icon, boolean) JRadioButton(String, Icon) JRadioButton(String, Icon, boolean) JRadioButton() |
创建一个JRadioButton 实例。字符串参数指定单选按钮应显示的文本(如果有)。类似地,Icon 参数指定应使用的图像,而不是外观的默认单选按钮图像。如果将布尔参数指定为true ,则初始化单选按钮为选中状态,但需要ButtonGroup 对象的批准。如果布尔参数不存在或为false ,则单选按钮最初为未选中状态。 |
JRadioButtonMenuItem(Action) JRadioButtonMenuItem(String) JRadioButtonMenuItem(Icon) JRadioButtonMenuItem(String, Icon) JRadioButtonMenuItem() |
创建一个JRadioButtonMenuItem 实例。这些参数的解释方式与JRadioButton 构造函数的参数相同,只是除了普通的单选按钮图标外,还显示任何指定的图标。 |
构造方法 | 目的 |
---|---|
JToggleButton(Action) JToggleButton(String) JToggleButton(String, boolean) JToggleButton(Icon) JToggleButton(Icon, boolean) JToggleButton(String, Icon) JToggleButton(String, Icon, boolean) JToggleButton() |
创建一个JToggleButton 实例,类似于JButton ,但具有两种状态。通常,您可以使用JRadioButton 或JCheckBox 而不是直接实例化JToggleButton ,但在不希望使用典型的单选按钮或复选框外观时,JToggleButton 会很有用。字符串参数指定切换按钮应显示的文本(如果有)。类似地,Icon 参数指定应使用的图像。将布尔参数设置为true 会将切换按钮初始化为已选择。如果布尔参数不存在或为false ,则切换按钮最初未选择。 |
构造函数或方法 | 用途 |
---|---|
ButtonGroup() | 创建一个ButtonGroup 实例。 |
void add(AbstractButton) void remove(AbstractButton) |
向组中添加按钮,或从组中移除按钮。 |
public ButtonGroup getGroup() (在 DefaultButtonModel 中) |
获取控制按钮的ButtonGroup (如果有的话)。例如:ButtonGroup group = ((DefaultButtonModel)button.getModel()).getGroup(); |
public ButtonGroup clearSelection() | 清除按钮组中选定按钮的状态。按钮组中的按钮均不被选中。 |
以下示例使用按钮。还可以参见使用工具栏的示例,该示例列出了向JToolBar
添加JButton
对象的程序。
ButtonDemo
如何使用常见按钮APIButtonHtmlDemo
在Swing组件中使用HTMLListDialog
如何使用JButton功能DialogDemo
如何创建对话框ProgressBarDemo
如何监控进度CheckBoxDemo
如何使用复选框ActionDemo
如何使用动作RadioButtonDemo
如何使用单选按钮DialogDemo
如何创建对话框MenuDemo
如何使用菜单ColorChooserDemo2
如何使用颜色选择器CrayonPanel
ScrollDemo
如何使用滚动窗格cm
你可以从以下文档中了解更多关于JavaFX按钮组件的信息: