《核心swing组件(六)》由会员分享,可在线阅读,更多相关《核心swing组件(六)(7页珍藏版)》请在金锄头文库上搜索。
1、核心核心 SwingSwing 组件组件( (六六) )核心 Swing 组件(六)核心 Swing 组件(六)4.6 JButton 类 JButton 组件是可以被选中的最基本的 AbstractButton 组件。他支持文本,图像以及基于 HTML 的标签,如图 4-12 所示。4.6.1 创建 JButtonJButton 类具有 5 个构造函数:public JButton()JButton button = new JButton(); public JButton(Icon image)Icon icon = new ImageIcon(“dog.jpg“);JButton bu
2、tton = 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);我们可以创建带有
3、或是不带有文本标签或图标的按钮。图标表示AbstractButton 中的默认或是 selected 图标属性。4.6.2 JButton 属性 JButton 组件并没有为 AbstactButton 添加更多的内容。如表 4-14 所示,JButton 的四个属性,唯一新添加的行为就是使用按钮成为默认。JButton 属性属性名 数据类型 访问性accessiableContext AccessiableContext 只读defaultButton boolean 只读defaultCapable boolean 读写绑定UIClassID String 只读默认按钮使用与其他按钮不同的
4、深色边框进行绘制。当一个按钮是默认按钮时,当在顶级窗口内按下回车键时会使得按钮被选中。这只有具有输入焦点的组件,例如文本组件或是其他的按钮,并不捕捉回车键的情况下才会起作用。因为 defaultButton 属性是只读的,(也许我们会问)我们如何将一个按钮设置为默认按钮呢?正如在第 8 章所描述的,所有的顶级窗口都包含一个 JRootPane。我们通过设置 JRootPane 的 defaultButton 属性来告诉 JRootPane 哪一个按钮是默认按钮。只有 defaultCapable 属性为 true 的按钮才可以被设置为默认按钮。图 4-13 显示了右上解的按钮设置为默认按钮。列
5、表 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
6、;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(JFra
7、me.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
8、= “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 组件本身并没有特定的事件处理功能。他们都是由Abs
9、tractButton 继承来的。尽管我们可以监听 Change 事件,Item事件以及 PropertyChange 事件,但是 JButton 最有用的监听器是ActionListener。当 JButton 组件被选中时,所有注册的 ActionListener 对象都会被通知到。当按钮被选中时,ActionEvent 会被传递到每一个监听器。当在多个组件之间使用共享监听器时,这个事件会传递按钮的actionCommand 属性从而助于标识哪一个按钮被选中。如果actionCommand 属性并没有被显示设置,则会传递当前的 text 属性。actionCommand 属性的显式应用有助
10、于本地化。因为 JButton 的text 属性是用户所看到的,作为按钮被选中事件监听器的我们不能依赖于本地化文本标签来确定哪一个按钮被选中。所以由于 text 属性可以被本地化,因而在英语为 Yes 的按钮而在西班牙语中则是 S 按钮。如果我们显式的设置 actionCommand 属性为 Yes字符串,那么无论用户正在使用哪一种语言 ,actionCommand 会保持 Yes 不变,而并不会使用本地化的 text 属性字符串。列表 4-7 在为列表 4-6 中的默认按钮添加了事件处理功能。注意,默认的行为可以正确工作:由任何组件按下回车键,按钮 2(默认按钮)都会被激活。package
11、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
12、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 =
13、 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(actionL
14、istener);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)
15、; 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.setVi
16、sible(true);EventQueue.invokeLater(runner); 4.6.4 自定义 JButton观感每一个已安装的 Swing 观感都会提供一个不同的 JButton 外观与默认的 UIResource 值设置集合。图 4-14 显示了预安装的观感类型集合的 JButton 组件的外观:Motif,Windows 以及 Ocean。表 4-15 显示了 JButton 的与 UIResource 相关的属性集合。对于JButton 组件,共有 34 个不同的属性。JButton UIResource 元素属性字符串对象类型Button.actionMapActionMapButton.backgroundColorButton.borderBorderButton.contentAreaFilledBoole