Java 中文官方教程 2022 版(十五)(1)https://developer.aliyun.com/article/1486397
如何使用 JButton 功能
普通按钮 — JButton
对象 — 比 AbstractButton
类提供的功能稍多一点:你可以将 JButton
设置为默认按钮。
一个顶级容器中最多只能有一个默认按钮。默认按钮通常具有突出的外观,并且当顶级容器具有键盘焦点并且用户按下 Return 或 Enter 键时会被点击。这里是一个对话框的图片,实现在 ListDialog 示例中,其中设置按钮是默认按钮:
您可以通过在顶层容器的根窗格上调用setDefaultButton
方法来设置默认按钮。以下是为ListDialog
示例设置默认按钮的代码:
*//In the constructor for a JDialog subclass:* getRootPane().setDefaultButton(setButton);
默认按钮功能的确切实现取决于外观。例如,在 Windows 外观中,默认按钮会更改为具有焦点的按钮,以便按 Enter 键单击具有焦点的按钮。当没有按钮具有焦点时,您最初指定为默认按钮的按钮再次成为默认按钮。
如何使用复选框
JCheckBox
类提供了对复选框按钮的支持。您还可以使用JCheckBoxMenuItem
类将复选框放入菜单中。因为JCheckBox
和JCheckBoxMenuItem
继承自AbstractButton
,Swing 复选框具有本节前面讨论的所有常规按钮特性。例如,您可以指定要在复选框中使用的图像。
复选框类似于单选按钮,但它们的选择模型不同,按照惯例。一组复选框中的任意数量 — 可以选择零个、一些或全部。另一方面,一组单选按钮只能选择一个按钮。
这是一个使用四个复选框自定义卡通的应用程序的图片:
试试这个:
- 单击启动按钮以使用Java™ Web Start运行 CheckBox Demo(下载 JDK 7 或更高版本)。或者,要自行编译和运行示例,请参考示例索引。
- 单击下巴按钮或按下 Alt-c。
下巴复选框变为未选中状态,下巴从图片中消失。其他复选框保持选中状态。此应用程序有一个项目侦听器,用于监听所有复选框。每次项目侦听器接收到事件时,应用程序会加载反映复选框当前状态的新图片。
每次单击复选框都会生成一个项目事件和一个操作事件。通常,您只监听项目事件,因为它们让您确定单击是选择还是取消选择复选框。以下是来自CheckBoxDemo.java
的代码,用于创建上一个示例中的复选框并对单击做出反应。
*//In initialization code:* 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); //Register a listener for the check boxes. chinButton.addItemListener(this); glassesButton.addItemListener(this); hairButton.addItemListener(this); teethButton.addItemListener(this); ... public void itemStateChanged(ItemEvent e) { ... Object source = e.getItemSelectable(); if (source == chinButton) { *//...make a note of it...* } else if (source == glassesButton) { *//...make a note of it...* } else if (source == hairButton) { *//...make a note of it...* } else if (source == teethButton) { *//...make a note of it...* } if (e.getStateChange() == ItemEvent.DESELECTED) *//...make a note of it...* ... updatePicture(); }
如何使用单选按钮
单选按钮是一组按钮,按照惯例,一次只能选择一个按钮。Swing 版本支持使用JRadioButton
和ButtonGroup
类的单选按钮。要将单选按钮放入菜单中,请使用JRadioButtonMenuItem
类。显示一组中的一个选择的其他方式包括组合框和列表。单选按钮看起来类似于复选框,但是按照惯例,复选框不限制同时选择的项目数量。
因为JRadioButton
继承自AbstractButton
,Swing 单选按钮具有所有通常的按钮特性,如本节前面讨论的。例如,您可以指定在单选按钮中显示的图像。
下面是一个应用程序的图片,使用五个单选按钮让您选择显示哪种宠物:
试试这个:
- 点击启动按钮以使用Java™ Web Start运行 RadioButton Demo(下载 JDK 7 或更高版本)。或者,要自行编译和运行示例,请参考示例索引。
- 点击Dog按钮或按下 Alt-d 键。
Dog按钮被选中,使Bird按钮变为未选中。图片从鸟变为狗。这个应用程序有一个监听所有单选按钮的 action listener。每次 action listener 接收到事件时,应用程序会显示刚刚点击的单选按钮的图片。
每当用户点击单选按钮(即使它已经被选中),按钮都会触发一个 action event。还会发生一个或两个 item events — 一个来自刚刚被选中的按钮,另一个来自失去选择的按钮(如果有的话)。通常,你会使用一个 action listener 来处理单选按钮的点击。
下面是RadioButtonDemo.java
中创建单选按钮并响应点击的代码,这是前面示例中的单选按钮。
*//In initialization code:* //Create the radio buttons. 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); //Group the radio buttons. ButtonGroup group = new ButtonGroup(); group.add(birdButton); group.add(catButton); group.add(dogButton); group.add(rabbitButton); group.add(pigButton); //Register a listener for the radio buttons. 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
以下表格列出了常用的与按钮相关的 API。您可能调用的其他方法,如 setFont
和 setForeground
,在 JComponent 类的 API 表中 列出。
使用按钮的 API 分为以下几类:
- 设置或获取按钮的内容
- 微调按钮的外观
- 实现按钮的功能
- 复选框构造函数
- 单选按钮构造函数
- 切换按钮构造函数
- 常用的按钮组构造函数/方法
设置或获取按钮的内容
方法或构造函数 | 目的 |
| JButton(Action) JButton(String, Icon)
JButton() | 创建一个 JButton
实例,并将其初始化为具有指定的文本/图像/操作。 |
| void setAction(Action) Action getAction()
根据 Action 实例的值设置或获取按钮的属性。 |
| void setText(String) String getText()
设置或获取按钮显示的文本。您可以使用 HTML 格式,如 在 Swing 组件中使用 HTML 中所述。 |
| void setIcon(Icon) Icon getIcon()
设置或获取按钮在未选中或按下时显示的图像。 |
| void setDisabledIcon(Icon) Icon getDisabledIcon()
设置或获取按钮在禁用时显示的图像。如果您没有指定禁用图像,则外观和感觉会通过操作默认图像来创建一个。 |
| void setPressedIcon(Icon) Icon getPressedIcon()
设置或获取按钮在被按下时显示的图像。 |
| void setSelectedIcon(Icon) Icon getSelectedIcon()
void setDisabledSelectedIcon(Icon)
Icon getDisabledSelectedIcon()
设置或获取按钮在选定时显示的图像。如果您没有指定禁用选定图像,则外观和感觉会通过操作选定图像来创建一个。 |
| setRolloverEnabled(boolean) boolean isRolloverEnabled()
void setRolloverSelectedIcon(Icon)
Icon getRolloverSelectedIcon()
使用setRolloverIcon(someIcon) 使按钮在鼠标悬停在其上时显示指定图标。setRolloverSelectedIcon 方法允许您在按钮选定时指定悬停图标,这对于两状态按钮(如切换按钮)非常有用。设置悬停图标会自动调用setRollover(true) ,启用悬停效果。 |
调整按钮外观
方法或构造函数 | 目的 |
| void setHorizontalAlignment(int) void setVerticalAlignment(int)
int getVerticalAlignment() | 设置或获取按钮内容应该放置在按钮的何处。AbstractButton
类允许水平对齐的以下任一值:RIGHT
、LEFT
、CENTER
(默认)、LEADING
和 TRAILING
。对于垂直对齐:TOP
、CENTER
(默认)和 BOTTOM
。 |
| void setHorizontalTextPosition(int) void setVerticalTextPosition(int)
int getHorizontalTextPosition()
int getVerticalTextPosition() | 设置或获取按钮文本应该放置在何处,相对于按钮的图像。AbstractButton
类允许水平位置的以下任一值:LEFT
、CENTER
、RIGHT
、LEADING
和 TRAILING
(默认)。对于垂直位置:TOP
、CENTER
(默认)和 BOTTOM
。 |
void setMargin(Insets) Insets getMargin() | 设置或获取按钮边框与其内容之间的像素数。 |
void setFocusPainted(boolean) boolean isFocusPainted() | 设置或获取按钮在获得焦点时是否应该呈现不同外观。 |
void setBorderPainted(boolean) boolean isBorderPainted() | 设置或获取按钮边框是否应该被绘制。 |
| void setIconTextGap(int) int getIconTextGap()
设置或获取文本和此按钮中显示的图标之间的间距。 |
实现按钮的功能
方法或构造函数 | 目的 |
| void setMnemonic(int) char getMnemonic()
设置或获取通过按下按钮的键盘替代方法。setMnemonic 方法的一种形式接受一个字符参数;然而,Swing 团队建议您改用一个int 参数,指定一个KeyEvent.VK_*X* 常量。 |
| void setDisplayedMnemonicIndex(int) int getDisplayedMnemonicIndex()
设置或获取文本中应该被装饰以表示助记符的字符的提示。请注意,并非所有外观和感觉都支持此功能。 |
| void setActionCommand(String) String getActionCommand()
设置或获取按钮执行的动作的名称。 |
| void addActionListener(ActionListener) ActionListener removeActionListener()
添加或移除监听按钮触发的动作事件的对象。 |
| void addItemListener(ItemListener) ItemListener removeItemListener()
添加或移除监听按钮触发的项目事件的对象。 |
| void setSelected(boolean) boolean isSelected()
设置或获取按钮是否被选中。仅适用于具有开/关状态的按钮,如复选框。 |
| void doClick() void doClick(int)
以编程方式执行“点击”操作。可选参数指定按钮看起来被按下的时间(以毫秒为单位)。 |
void setMultiClickThreshhold(long) long getMultiClickThreshhold() |
复选框构造函数
构造函数 | 目的 |
| JCheckBox(操作) JCheckBox(字符串)
JCheckBox() | 创建一个JCheckBox
实例。字符串参数指定复选框应显示的文本(如果有)。同样,Icon
参数指定应使用的图像,而不是外观的默认复选框图像。将布尔参数指定为true
会将复选框初始化为选中状态。如果省略布尔参数或为false
,则复选框最初未选中。 |
| JCheckBoxMenuItem(操作) JCheckBoxMenuItem(字符串)
JCheckBoxMenuItem(字符串, 图标, 布尔值)
JCheckBoxMenuItem() | 创建一个JCheckBoxMenuItem
实例。参数的解释方式与JCheckBox
构造函数的参数相同,只是任何指定的图标会显示在普通复选框图标的旁边。 |
单选按钮构造函数
构造函数 | 目的 |
| JRadioButton(操作) JRadioButton(字符串)
JRadioButton() | 创建一个JRadioButton
实例。字符串参数指定了单选按钮应显示的文本(如果有)。同样,Icon
参数指定了应该使用的图像,而不是外观的默认单选按钮图像。将布尔参数指定为true
会将单选按钮初始化为选中状态,取决于ButtonGroup
对象的批准。如果布尔参数不存在或为false
,则单选按钮最初未选中。 |
| JRadioButtonMenuItem(操作) JRadioButtonMenuItem(字符串)
JRadioButtonMenuItem() | 创建一个JRadioButtonMenuItem
实例。参数的解释方式与JRadioButton
构造函数的参数相同,只是任何指定的图标会显示在普通单选按钮图标之外。 |
切换按钮构造函数
构造函数 | 目的 |
| JToggleButton(操作) JToggleButton(字符串)
JToggleButton(String, boolean)
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(); |
公共 ButtonGroup clearSelection() | 清除 ButtonGroup 中选定按钮的状态。ButtonGroup 中的按钮都不会被选中。 |
使用不同类型按钮的示例
以下示例使用按钮。另请参阅使用工具栏的示例,其中列出了将 JButton
对象添加到 JToolBar
中的程序。
示例 | 描述位置 | 备注 |
ButtonDemo |
如何使用常见按钮 API | 使用助记符和图标。指定按钮文本位置,相对于按钮图标。使用动作命令。 |
ButtonHtmlDemo |
在 Swing 组件中使用 HTML | 一个使用 HTML 格式的 ButtonDemo 版本。 |
ListDialog |
如何使用 JButton 功能 | 实现一个带有两个按钮的对话框,其中一个是默认按钮。 |
DialogDemo |
如何制作对话框 | 具有与单选按钮状态相关联的“显示”按钮行为。使用匿名的内部类实现动作监听器。 |
ProgressBarDemo |
如何监视进度 | 使用命名的内部类实现按钮的动作监听器。 |
CheckBoxDemo |
如何使用复选框 | 使用复选框按钮确定应显示哪 16 幅图像。 |
ActionDemo |
如何使用动作 | 使用复选框菜单项来设置程序的状态。 |
RadioButtonDemo |
如何使用单选按钮 | 使用单选按钮确定应显示哪五幅图像。 |
DialogDemo |
如何制作对话框 | 包含几组单选按钮,用于确定要弹出哪个对话框。 |
MenuDemo |
如何使用菜单 | 包含单选按钮菜单项和复选框菜单项。 |
ColorChooserDemo2 |
如何使用颜色选择器 | CrayonPanel 中的蜡笔实现为切换按钮。 |
ScrollDemo |
如何使用滚动窗格 | cm 按钮是一个切换按钮。 |
您可以从以下文档中了解更多关于 JavaFX 按钮组件的信息:
如何使用 ButtonGroup 组件
原文:
docs.oracle.com/javase/tutorial/uiswing/components/buttongroup.html
ButtonGroup
组件管理一组按钮的选中/未选中状态。对于该组,ButtonGroup
实例保证一次只能选择一个按钮。
最初,由ButtonGroup
实例管理的所有按钮都未被选中。
如何使用 ButtonGroup 功能
你可以将ButtonGroup
与任何继承自AbstractButton
的对象一起使用。通常,按钮组包含JRadioButton, JRadioButtonMenuItem
或JToggleButton
的实例。将JButton
或JMenuItem
的实例放入按钮组中是没有意义的,因为JButton
和JMenuItem
没有实现选择/取消选择按钮状态。
通常,编写使用ButtonGroup
组件的代码时,通常会遵循以下步骤。
- 子类化
JFrame
- 与布局管理器一起调用
ContextPane
- 声明和配置一组单选按钮或切换按钮
- 实例化一个
ButtonGroup
对象 - 调用该 buttongroup 对象上的
add
方法,以便将每个按钮添加到组中。
有关详细信息和代码示例,请参阅如何使用单选按钮。它展示了如何使用ButtonGroup
组件将一组单选按钮设置到一个 JPanel 中。
ButtonGroup API
常用的 Button Group 构造函数/方法
构造函数或方法 | 目的 |
ButtonGroup() | 创建一个ButtonGroup 实例。 |
void add(AbstractButton) void remove(AbstractButton) | 将按钮添加到组中,或从组中移除按钮。 |
public ButtonGroup getGroup() (在DefaultButtonModel 中) |
获取控制按钮的ButtonGroup (如果有)。例如:ButtonGroup group = ((DefaultButtonModel)button.getModel()).getGroup(); |
public ButtonGroup clearSelection() | 清除 ButtonGroup 中选定按钮的状态。ButtonGroup 中的按钮都未被选中。 |
ButtonGroup 示例
以下演示应用程序使用 ButtonGroup 组件将单选按钮分组显示在窗口上。
示例 | 描述位置 | 注意事项 |
RadioButtonDemo |
如何使用单选按钮 | 使用单选按钮确定应显示哪五幅图像。 |
如何使用颜色选择器
原文:
docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html
使用JColorChooser
类使用户可以从调色板中选择颜色。颜色选择器是一个组件,您可以将其放置在程序 GUI 中的任何位置。JColorChooser
API 还可以轻松地弹出包含颜色选择器的对话框(模态或非模态)。
这是一个使用颜色选择器设置横幅文本颜色的应用程序的图片:
试试这个:
- 单击“启动”按钮以使用Java™ Web Start运行 ColorChooser 演示(下载 JDK)。或者,要自行编译和运行示例,请参考示例索引。
该程序的源代码位于ColorChooserDemo.java
中。
颜色选择器包括标有选择文本颜色的框内的所有内容。这是 Java 外观和感觉中标准颜色选择器的样子。它包含两部分,一个选项卡窗格和一个预览面板。选项卡窗格中的三个选项卡选择选择器面板。选项卡窗格下方的预览面板显示当前选定的颜色。
这是创建JColorChooser
实例并将其添加到容器的示例代码:
public class ColorChooserDemo extends JPanel ... { public ColorChooserDemo() { super(new BorderLayout()); banner = new JLabel("Welcome to the Tutorial Zone!", JLabel.CENTER); banner.setForeground(Color.yellow); . . . tcc = new JColorChooser(banner.getForeground()); . . . add(tcc, BorderLayout.PAGE_END); }
Java 中文官方教程 2022 版(十五)(3)https://developer.aliyun.com/article/1486401