核心Swing组件(六)

摘要:
JButton属性属性名称数据类型accessibilityaccessibleContextAccessiblecontext只读defaultButtonboolean只读defaultCapableboolean读写绑定UIClassIDString只读默认按钮使用与其他按钮不同的深色边框绘制。packageswingstudy.ch04;导入java.awt.EventQueue;导入java.awt.GridLayout;导入java.awt.event.KeyEvent;导入javax.swing.JButton;导入javax.swing.JFrame;导入javax.swing.JRootPane;publicclassDefaultButton{/***@paramargs*/publicstaticvoidmain{//TODOAuto-generatedmethodstubRunnablerunner=newRunnable(){publicvoidrun(){JFrameframe=newJFrame;frame.setDefaultCloseOperation;frame.setLayout;JButtonbutton1=newJButton;button1.setMnemonic;frame.add;JButton按钮2=newJBbutton;frame.edd;StringhtmlButton=“HTMLButton”+“多行” ; JButtonbutton4=newJButton;frame.add;JRootPanerootPane=frame.getRootPane();rootPane.setDefaultButton;frame.setSize;frame.setVisible;}};EventQueue.invokeLater;}}4.6.3处理JButton事件JButton组件本身没有特定的事件处理功能。尽管我们可以侦听Change事件、Item事件和PropertyChange事件,但JButton最有用的侦听器是ActionListener。当选择JButton组件时,将通知所有注册的ActionListener对象。如果actionCommand属性未设置为显示,则将传递当前文本属性。请注意,默认行为正常工作:当任何组件按下Enter键时,按钮2将被激活。
4.6 JButton类

JButton组件是可以被选中的最基本的AbstractButton组件。他支持文本,图像以及基于HTML的标签,如图4-12所示。

Swing_4_12

4.6.1 创建JButton

JButton类具有5个构造函数:

public JButton()
JButton button = new JButton();
 
public JButton(Icon image)
Icon icon = new ImageIcon("dog.jpg");
JButton button = new JButton(icon);
 
public JButton(String text)
JButton button = new JButton("Dog");
 
public JButton(String text, Icon icon)
Icon icon = new ImageIcon("dog.jpg");
JButton button = new JButton("Dog", icon);
 
public JButton(Action action)
Action action = ...;
JButton button = new JButton(action);

我们可以创建带有或是不带有文本标签或图标的按钮。图标表示AbstractButton中的默认或是selected图标属性。

4.6.2 JButton属性

JButton组件并没有为AbstactButton添加更多的内容。如表4-14所示,JButton的四个属性,唯一新添加的行为就是使用按钮成为默认。

JButton属性

属性名
数据类型

访问性

accessiableContext
AccessiableContext

只读

defaultButton
boolean

只读

defaultCapable
boolean

读写绑定

UIClassID
String

只读

默认按钮使用与其他按钮不同的深色边框进行绘制。当一个按钮是默认按钮时,当在顶级窗口内按下回车键时会使得按钮被选中。这只有具有输入焦点的组件,例如文本组件或是其他的按钮,并不捕捉回车键的情况下才会起作用。因为defaultButton属性是只读的,(也许我们会问)我们如何将一个按钮设置为默认按钮呢?正如在第8章所描述的,所有的顶级窗口都包含一个JRootPane。我们通过设置JRootPane的defaultButton属性来告诉JRootPane哪一个按钮是默认按钮。只有defaultCapable属性为true的按钮才可以被设置为默认按钮。图4-13显示了右上解的按钮设置为默认按钮。

Swing_4_13

列表4-6演示了设置默认按钮以及基本JButton的使用。如果默认按钮的外观并没有如图4-13所示的那样明显,在第9章中会介绍JOptionPane,此时外观的区别将会更为明显。图4-13使用了一个2X2的GirdLayout布局。构造函数的另外两个参数表示间距,从而有助于使用默认按钮的外观更为明显。

package swingstudy.ch04;
 
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JRootPane;
 
public class DefaultButton {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		Runnable runner = new Runnable() {
			public void run() {
				JFrame frame = new JFrame("DefaultButton");
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
				frame.setLayout(new GridLayout(2,2,10,10));
 
				JButton button1 = new JButton("Text Button");
				button1.setMnemonic(KeyEvent.VK_B);
				frame.add(button1);
 
				JButton button2 = new JButton("WarnIcon");
				frame.add(button2);
 
				JButton button3 = new JButton("Warn");
				frame.add(button3);
 
				String htmlButton = "HTMLButton
"+ "Multi-line"; JButton button4 = new JButton(htmlButton); frame.add(button4); JRootPane rootPane = frame.getRootPane(); rootPane.setDefaultButton(button2); frame.setSize(300, 200); frame.setVisible(true); } }; EventQueue.invokeLater(runner); } }

4.6.3 处理JButton事件

JButton组件本身并没有特定的事件处理功能。他们都是由AbstractButton继承来的。尽管我们可以监听Change事件,Item事件以及PropertyChange事件,但是JButton最有用的监听器是ActionListener。

当JButton组件被选中时,所有注册的ActionListener对象都会被通知到。当按钮被选中时,ActionEvent会被传递到每一个监听器。当在多个组件之间使用共享监听器时,这个事件会传递按钮的actionCommand属性从而助于标识哪一个按钮被选中。如果actionCommand属性并没有被显示设置,则会传递当前的text属性。actionCommand属性的显式应用有助于本地化。因为JButton的text属性是用户所看到的,作为按钮被选中事件监听器的我们不能依赖于本地化文本标签来确定哪一个按钮被选中。所以由于text属性可以被本地化,因而在英语为Yes的按钮而在西班牙语中则是 Sí 按钮。如果我们显式的设置actionCommand属性为Yes字符串,那么无论用户正在使用哪一种语言 ,actionCommand会保持Yes不变,而并不会使用本地化的text属性字符串。

列表4-7在为列表4-6中的默认按钮添加了事件处理功能。注意,默认的行为可以正确工作:由任何组件按下回车键,按钮2(默认按钮)都会被激活。

package swingstudy.ch04;
 
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JRootPane;
 
public class ActionButtonSample {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		Runnable runner = new Runnable() {
			public void run() {
				JFrame frame = new JFrame("DefaultButton");
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
				frame.setLayout(new GridLayout(2,2,10,10));
 
				ActionListener actionListener = new ActionListener() {
					public void actionPerformed(ActionEvent event) {
						String command = event.getActionCommand();
						System.out.println("Selected: "+command);
					}
				};
 
				JButton button1 = new JButton("Text Button");
				button1.setMnemonic(KeyEvent.VK_B);
				button1.setActionCommand("First");
				button1.addActionListener(actionListener);
				frame.add(button1);
 
				JButton button2 = new JButton("WarnIcon");
				button2.setActionCommand("Second");
				button2.addActionListener(actionListener);
				frame.add(button2);
 
				JButton button3 = new JButton("Warn");
				button3.setActionCommand("Third");
				button3.addActionListener(actionListener);
				frame.add(button3);
 
				String htmlButton = "HTMLButton
"+ "Multi-line"; JButton button4 = new JButton(htmlButton); button4.setActionCommand("Fourth"); button4.addActionListener(actionListener); frame.add(button4); JRootPane rootPane = frame.getRootPane(); rootPane.setDefaultButton(button2); frame.setSize(300, 200); frame.setVisible(true); } }; EventQueue.invokeLater(runner); } }

4.6.4 自定义JButton观感

每一个已安装的Swing观感都会提供一个不同的JButton外观与默认的UIResource值设置集合。图4-14显示了预安装的观感类型集合的JButton组件的外观:Motif,Windows以及Ocean。

Swing_4_14

表4-15显示了JButton的与UIResource相关的属性集合。对于JButton组件,共有34个不同的属性。

JButton UIResource元素

属性字符串

对象类型

Button.actionMap

ActionMap

Button.background

Color

Button.border

Border

Button.contentAreaFilled

Boolean

Button.darkShadow

Color

Button.dashedRectGapHeight

Integer

Button.dashedRectGapWidth

Integer

Button.dashedRectGapX

Integer

Button.dashedRectGapY

Integer

Button.defaultButtonFollowsFocus

Boolean

Button.disabledForeground

Color

Button.disabledGrayRang

Integer[]

Button.disabledShadow

Color

Button.disabledText

Color

Button.disabledToolBarBorderBackground

Color

Button.focus

Color

Button.focusInputMap

InputMap

Button.font

Font

Button.foreground

Color

Button.gradient

List

Button.highlight

Color

Button.icon

Icon

Button.iconTextGap

Integer

Button.light

Color

Button.margin

Insets

Button.rollover

Boolean

Button.rolloverIconType

String

Button.select

Color

Button.shadow

Color

Button.showMnemonics

Boolean

Button.textIconGap

Integer

Button.textShiftOffset

Integer

Button.toolBarBorderBackground

Color

ButtonUI

String

免责声明:文章转载自《核心Swing组件(六)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇XML文件的解析--libxml库函数解释Jupyter修改默认目录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java Swing编程之仿js树状折叠菜单

最近要完成一个需求:用swing做个树状菜单,含二级菜单,点击一级菜单展开二级菜单,且二级菜单数目超过预览视图会出现滚动条。由于swing研究的少,花了不少精力! 先看下测试效果图: 收起图: 展开图: 完整源码: 1 package com.xuwei.test2; 2 3 import java.awt.BorderLayout;...

Android应用开发基础篇(8)-----SurfaceView

链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/25/2368069.html 一、概述       SurfaceView也是一个用来画图的部件,不过由于它的效率比较高,因此一般多用在游戏编程中,在摄像头编程中也会用到,还有它和View比较大的不同是它可以在非UI线程里画图。下面的实现中会提到使用Su...

7、Semantic-UI之图标与按钮组

7.1 图标按钮   Semantic-UI中可以定义一组图标样式,并且可以在按钮中使用图标。 示例:定义一个图标按钮 <button class="ui black button"> <i class="unlock green icon"></i> </button> 示例:定义一组图标按钮 &...

Selenium+Python:下载文件(Firefox 和 Chrome)

引自  https://blog.csdn.net/Momorrine/article/details/79794146 1.      环境 操作系统 Win10 IDE Eclipse (Oxygen 4.7)+ PyDev 5.9.2 (JDK1.8) Python 3.5 Selenium selenium-3.9.0-py2.py...

高级Swing容器(一)

第10章探讨了AWT与Swing中的布局管理器。在本章中,我们将会了解一些构建在这些布局管理器之上的容器以及其他的一些无需布局管理器的容器。我们的探讨由Box类开始,我们将会发现使用BoxLayout管理器来创建一个单行或单列组件的最好方法。接下来我们会了解JSplitPane容器,他类似于其中只有两个组件的特殊的Box。JSplitPane提供了一个分隔...

【snmp】win7安装和配置snmp

一、安装SNMP 1、打开控制面板—>程序和功能—>打开或关闭Windows功能 勾上复选框,点击确定按钮 2、开始安装SNMP 3、snmp安装完成,需要重启计算机才能生效,可以立即重启或稍后重启  安装完成后,再次打开控制面板—>程序和功能—>打开或关闭Windows功能,简单网络管理协议(SNMP)这里是勾选上的   二...