如何使用按钮,复选框和单选按钮
要创建按钮,您可以实例化从AbstractButton类派生的众多类之一。下表显示了您可能想使用的 Swing 定义的AbstractButton
子类:
Class | Summary | Where Described |
---|---|---|
JButton | 通用按钮。 | 如何使用通用按钮 API和如何使用 JButton 功能 |
JCheckBox | 复选框按钮。 | 如何使用复选框 |
JRadioButton | 一组单选按钮之一。 | 如何使用单选按钮 |
JMenuItem | 菜单中的一项。 | 如何使用菜单 |
JCheckBoxMenuItem | 带有复选框的菜单项。 | 如何使用菜单和如何使用复选框 |
JRadioButtonMenuItem | 具有单选按钮的菜单项。 | 如何使用菜单和如何使用单选按钮 |
JToggleButton | 实现JCheckBox 和JRadioButton 继承的切换功能。可以实例化或子类化以创建两个状态的按钮。 | 用于某些examples |
Note:
如果要将一组按钮收集到一行或一列中,则应签出tool bars。
首先,本节说明AbstractButton
定义的基本按钮 API,因此所有 Swing 按钮都具有相同之处。接下来,它描述了JButton
添加到AbstractButton
的少量 API。之后,本节将向您展示如何使用专门的 API 来实现复选框和单选按钮。
如何使用通用按钮 API
这是显示三个按钮的应用程序的图片:
Try this:
-
单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行按钮演示。另外,要自己编译和运行示例,请查阅example index。
-
单击左按钮。
它禁用中间按钮(以及它本身,因为它不再有用了),并启用了右键。 -
单击右键。
它启用中键和左键,并禁用自身。
如ButtonDemo
示例所示,Swing 按钮可以同时显示文本和图像。在ButtonDemo
中,每个按钮的文本相对于其图像均位于不同的位置。每个按钮文本中带下划线的字母显示每个按钮的* mnemonic *(替代键盘)。在大多数外观上,用户可以通过按 Alt 键和助记符来单击按钮。例如,Alt-M 将单击 ButtonDemo 中的“中间”按钮。
禁用按钮后,外观会自动生成按钮的禁用外观。但是,您可以提供一个图像来代替普通图像。例如,您可以提供左右按钮中使用的图像的灰色版本。
如何实现事件处理取决于您使用的按钮类型以及使用方式。通常,您实现action listener,每次用户单击按钮时都会收到通知。对于check boxes,您通常使用item listener,当选中或取消选中该复选框时会收到通知。
以下是来自ButtonDemo.java的代码,该代码在上一个示例中创建按钮并对按钮单击做出反应。粗体代码是如果按钮没有图像则将保留的代码。
//In initialization code:
ImageIcon leftButtonIcon = createImageIcon("images/right.gif");
ImageIcon middleButtonIcon = createImageIcon("images/middle.gif");
ImageIcon rightButtonIcon = createImageIcon("images/left.gif");
b1 = new JButton("Disable middle button", leftButtonIcon);
b1.setVerticalTextPosition(AbstractButton.CENTER);
b1.setHorizontalTextPosition(AbstractButton.LEADING); //aka LEFT, for left-to-right locales
b1.setMnemonic(KeyEvent.VK_D);
b1.setActionCommand("disable");
b2 = new JButton("Middle button", middleButtonIcon);
b2.setVerticalTextPosition(AbstractButton.BOTTOM);
b2.setHorizontalTextPosition(AbstractButton.CENTER);
b2.setMnemonic(KeyEvent.VK_M);
b3 = new JButton("Enable middle button", rightButtonIcon);
//Use the default text position of CENTER, TRAILING (RIGHT).
b3.setMnemonic(KeyEvent.VK_E);
b3.setActionCommand("enable");
b3.setEnabled(false);
//Listen for actions on buttons 1 and 3.
b1.addActionListener(this);
b3.addActionListener(this);
b1.setToolTipText("Click this button to disable "
+ "the middle button.");
b2.setToolTipText("This middle button does nothing "
+ "when you click it.");
b3.setToolTipText("Click this button to enable the "
+ "middle button.");
...
}
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);
...//error handling omitted for clarity...
return new ImageIcon(imgURL);
}
如何使用 JButton 功能
普通按钮JButton
对象比AbstractButton
类提供的功能要多一点:您可以将JButton
作为默认按钮。
顶级容器中最多有一个按钮可以是默认按钮。默认按钮通常具有突出显示的外观,并且只要顶级容器具有键盘焦点并且用户按下 Return 或 Enter 键,就会单击该按钮。这是一个在ListDialog示例中实现的对话框的图片,其中“设置”按钮是默认按钮:
您可以通过调用顶级容器的根窗格上的setDefaultButton
方法来设置默认按钮。这是为ListDialog
示例设置默认按钮的代码:
//In the constructor for a JDialog subclass:
getRootPane().setDefaultButton(setButton);
默认按钮功能的确切实现取决于外观。例如,在 Windows 外观中,默认按钮将更改为具有焦点的按钮,因此按 Enter 键将单击焦点按钮。当没有按钮成为焦点时,您最初指定为默认按钮的按钮将再次变为默认按钮。
如何使用复选框
JCheckBox类提供对复选框按钮的支持。您也可以使用JCheckBoxMenuItem类将复选框放在menus中。因为JCheckBox
和JCheckBoxMenuItem
继承自AbstractButton
,所以 Swing 复选框具有所有通常的按钮 Feature,如本节前面所述。例如,您可以指定要在复选框中使用的图像。
复选框类似于radio buttons,但按照惯例,它们的选择模型不同。可以选择组中的任意数量的复选框-无,全部或全部。另一方面,一组单选按钮只能选择一个按钮。
这是使用四个复选框来自定义卡通的应用程序的图片:
Try this:
-
单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行 CheckBox 演示。另外,要自己编译和运行示例,请查阅example index。
-
单击 Chin 按钮或按 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类的单选按钮。要将单选按钮放在menu中,请使用JRadioButtonMenuItem类。显示很多选择的其他方式是combo boxes和lists。单选按钮看上去类似于check boxes,但是按照惯例,复选框对一次可以选择多少个项目没有限制。
因为JRadioButton
继承自AbstractButton
,所以 Swing 单选按钮具有所有通常的按钮 Feature,如本节前面所述。例如,您可以指定单选按钮中显示的图像。
这是一个应用程序的图片,该应用程序使用五个单选按钮来选择显示哪种宠物:
Try this:
-
单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行 RadioButton 演示。另外,要自己编译和运行示例,请查阅example index。
-
单击“狗”按钮或按 Alt-d。
“狗”按钮变为选中状态,从而使“鸟”按钮变为未选中状态。图片从鸟变成狗。该应用程序具有一个动作侦听器,可侦听所有单选按钮。每次动作侦听器收到事件时,应用程序都会显示刚刚单击的单选按钮的图片。
每次用户单击一个单选按钮(即使它已经被选中),该按钮都会触发action event。一或两个item events也会发生-一个来自刚刚选择的按钮,另一个来自丢失选择的按钮(如果有)。通常,您使用动作侦听器处理单选按钮的单击。
以下是来自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 没有强制执行此规则-一组单选按钮不能进行初始选择。一旦用户做出选择,则从此开始仅选择一个按钮。
Button API
下表列出了常用的与按钮相关的 API。 JComponent 类的 API 表中列出了您可能调用的其他方法,例如setFont
和setForeground
。
使用按钮的 API 分为以下几类:
方法或构造函数 | Purpose | |
---|---|---|
JButton(Action) | ||
JButton(String, Icon) JButton(String) JButton(Icon) JButton() | 创建一个JButton 实例,将其初始化为具有指定的文本/图像/动作。 | |
void setAction(Action) Action getAction() | 根据Action 实例中的值设置或获取按钮的属性。 | |
void setText(String) String getText() | 设置或获取按钮显示的文本。您可以使用在 Swing 组件中使用 HTML。 | 中所述的 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 setRolloverIcon(Icon) Icon getRolloverIcon() void setRolloverSelectedIcon(Icon) Icon getRolloverSelectedIcon() | 使用setRolloverIcon(someIcon) 使光标移过该按钮时,该按钮显示指定的图标。 setRolloverSelectedIcon 方法使您可以在选择按钮时指定过渡图标-这对于两种状态的按钮(例如切换按钮)很有用。设置翻转图标会自动调用setRollover(true) ,从而启用翻转。 |
方法或构造函数 | Purpose |
---|---|
void setHorizontalAlignment(int) | |
void setVerticalAlignment(int) int getHorizontalAlignment() 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() | 设置或获取此按钮上显示的文本和图标之间的间距。 |
方法或构造函数 | Purpose |
---|---|
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() | 设置或获取两次鼠标按下事件之间的时间(以毫秒为单位),以使按钮生成相应的动作事件。 |
Constructor | Purpose |
---|---|
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 构造函数的参数方式相同,除了会显示除常规复选框图标之外的任何指定图标。 |
Constructor | Purpose |
---|---|
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 构造函数的参数解释相同,除了会显示除常规单选按钮图标之外的任何指定图标。 |
Constructor | Purpose |
---|---|
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 ,则最初未选择切换按钮。 |
构造函数或方法 | Purpose |
---|---|
ButtonGroup() | 创建一个ButtonGroup 实例。 |
void add(AbstractButton) | |
void remove(AbstractButton) | 向该组添加按钮,或从该组中删除按钮。 |
公共 ButtonGroup getGroup() (在 DefaultButtonModel 中) | 获取用于控制按钮的ButtonGroup (如果有)。例如:ButtonGroup group = ((DefaultButtonModel)button.getModel()).getGroup(); |
公共 ButtonGroup clearSelection() | 清除 ButtonGroup 中选定按钮的状态。在 ButtonGroup 中没有选择任何按钮。 |
使用各种按钮的示例
以下示例使用按钮。另请参见使用工具栏的示例,其中列出了将JButton
个对象添加到JToolBar
的程序。
Example | Where Described | Notes |
---|---|---|
ButtonDemo | 如何使用通用按钮 API | 使用助记符和图标。指定按钮文本相对于按钮图标的位置。使用动作命令。 |
ButtonHtmlDemo | 在 Swing 组件中使用 HTML | 一个 ButtonDemo 版本,其按钮中使用 HTML 格式。 |
ListDialog | 如何使用 JButton 功能 | 实现一个带有两个按钮的对话框,其中一个是默认按钮。 |
DialogDemo | 如何制作对话框 | 具有“显示它”按钮,其行为与单选按钮的状态有关。使用较大但内部匿名的类来实现动作侦听器。 |
ProgressBarDemo | 如何监控进度 | 使用命名的内部类实现按钮的动作侦听器。 |
CheckBoxDemo | 如何使用复选框 | 使用复选框按钮确定应显示 16 张图像中的哪张。 |
ActionDemo | 如何使用动作 | 使用复选框菜单项设置程序的状态。 |
RadioButtonDemo | 如何使用单选按钮 | 使用单选按钮确定应显示五个图像中的哪个。 |
DialogDemo | 如何制作对话框 | 包含多组单选按钮,用于确定要弹出的对话框。 |
MenuDemo | 如何使用菜单 | 包含单选按钮菜单项和复选框菜单项。 |
ColorChooserDemo2 | 如何使用颜色 selectors | CrayonPanel 中的蜡笔被实现为切换按钮。 |
ScrollDemo | 如何使用滚动窗格 | cm 按钮是一个切换按钮。 |
您可以从以下文档中了解有关 JavaFX 按钮组件的更多信息: