java界面编程(5) ------ 按钮和按钮组

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020

  了解了布局管理器和Swing事件模型,那么剩下的就是Swing 的各个组件了,下面就开始逐个学习Swing的各个组件的用法及功能,本节先来看最常用的按钮和按钮组。

1. 按钮

   Swing提供了许多类型的按钮,有普通的按钮,复选框,单选等按钮,甚至菜单项,所有的这些按钮都是从AbstractButton继承而来。如下图的继承关系:

可以看出,JButton,JMenuItem,JToggleButton都是AbstractButton的子类,我们再继续往下看它们的子类:

  这里就列出了所有的按钮,下面就演示各个按钮的用法,这里不再实现监听器,可以根据需要自己添加。

public class Buttons extends JFrame {

	private JButton jb = new JButton("按钮");

	private BasicArrowButton
			up = new BasicArrowButton(BasicArrowButton.NORTH),
			down = new BasicArrowButton(BasicArrowButton.SOUTH),
			right = new BasicArrowButton(BasicArrowButton.EAST),
			center = new BasicArrowButton(BasicArrowButton.CENTER),
			left = new BasicArrowButton(BasicArrowButton.WEST);

	public Buttons() {
		// TODO Auto-generated constructor stub
		setVisible(true);
		setSize(500,300);
		setLayout(new FlowLayout());
		add(jb);
		add(new JToggleButton("JToggleButton"));
		add(new JCheckBox("JCheckBox"));
		add(new JRadioButton("JRadioButton"));

		JPanel jp = new JPanel();
		jp.setBorder(new TitledBorder("BasicArrowButton"));
		jp.add(up);
		jp.add(down);
		jp.add(left);
		jp.add(right);
		jp.add(center);
		add(jp);

		JPanel jp1 = new JPanel();
		jp1.setBorder(new TitledBorder("JCheckBoxMenuItem"));
		jp1.add(new JCheckBoxMenuItem("JCheckBoxMenuItem1"));
		jp1.add(new JCheckBoxMenuItem("JCheckBoxMenuItem2"));
		add(jp1);

		JPanel jp2 = new JPanel();
		jp2.setBorder(new TitledBorder("JRadioButtonMenuItem"));
		jp2.add(new JRadioButtonMenuItem("JRadioButtonMenuItem1"));
		jp2.add(new JRadioButtonMenuItem("JRadioButtonMenuItem2"));
		add(jp2);

		JPanel jp3 = new JPanel();
		jp3.setBorder(new TitledBorder("JMenu"));
		jp3.add(new  JMenu("JMenu1"));
		jp3.add(new  JMenu("JMenu2"));
		add(jp3);

	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Buttons();
	}

}

  运行,如下图效果:

  这里仅仅是将这些按钮显示在窗体上,并没有给各个组件添加事件监听器。

2.按钮组

  要想让单选按钮表现出某种"排他"行为,必须把它们加入到一个"按钮组(ButtonGroup)"中,其实,任何AbstarctButton对象都可以加入到按钮组中。

为了避免重复的代码,下面的例子使用反射功能来产生几组不同的类型的按钮。

public class ButtonGroups extends JFrame {

	private static String[] ids = {
		"Mon",
		"Tue",
		"Wed",
		"Thu",
		"Fri",
		"Sat",
		"Sun"
	};
	private JPanel makePanel(Class<? extends AbstractButton> kind,String[] ids){
		ButtonGroup  bg = new ButtonGroup();
		JPanel jp = new JPanel();
		String title = kind.getName();
		title = title.substring(title.lastIndexOf('.')+1);
		jp.setBorder(new TitledBorder(title));
		for(String id : ids){
			AbstractButton ab = new JButton("failed");
			try {
				Constructor ctor = kind.getConstructor(String.class);
				ab = (AbstractButton)ctor.newInstance(id);
			} catch (Exception  e) {

				System.out.println("cat't create "+kind);
			}
			bg.add(ab);
			jp.add(ab);
		}

		return jp;
	}

	public ButtonGroups() {
		// TODO Auto-generated constructor stub
		setLayout(new FlowLayout());
		setSize(500,300);
		setVisible(true);
		add(makePanel(JButton.class, ids));
		add(makePanel(JToggleButton.class,ids));
		add(makePanel(JCheckBox.class,ids));
		add(makePanel(JRadioButton.class,ids));
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new ButtonGroups();
	}

}

其中,makePanel()方法,是用来创建一个按钮组和一个JPanel,此方法的第二个参数是一个字符串数据,针对其中每个字符串,将创建一个由第一个参数所代表的按钮实例,然后将此按钮加入到JPanel中。

运行程序,效果如下:

边框的标题是从类的名称中得到的,并且去掉了其中的前缀,直接取出类名。getConstructor()方法产生一个Constructor对象,这个构造器接受“传递给getConstructor()”的Class列表里面指定的类型“所组成的数组作为码数,然后,只需要调用newInstance(),并且把包含实际参数列表传递给它,在本实例中即ids数据的字符串。

要想通过按钮得到“排他”行为,就得先创建一个按钮组,然后把你希望具有的“排他”行为的按钮加入到这个按钮组中。运行程序,可以发现除了JButton以外,其他按钮都具有这种“排他”的行为。

时间: 2024-11-03 05:29:50

java界面编程(5) ------ 按钮和按钮组的相关文章

java 界面编程(上)

一.AWT介绍 1)AWT(Abstract windows toolkit) 包括了很多类和接口,用于java Application的GUI(Graphics User Interface图形界面编程) 2)GUI的各种元素(窗口,按钮,文本框)等都由java类来实现 3)使用AWT所涉及的类一般在java.awt包及其子包中. 4)Container和Component是AWT中的两个核心类. 所有的可以显示出来的图形元素都被称为Componnet,Component代表了所有的可见的图形

java 界面编程中 JButton问题

在图形化界面编程中,按钮JButton使用时需要布置按钮的位置,更改按钮大小. 1)按钮初始化 JButton button = new JButton() /*在new JButton()括号中可以添加按钮显示的字符等 JButton button = new JButton("JButtonExample") 但是不能初始化按钮的大小和位置*/ 2)JButton按钮的在面板中位置的确定 对JButton大小的设置     ——因为JButton是属于小器件类型的,所以一般的set

Java界面编程-建立一个可以画出图形的简单框架

引子:总共使用3个.java文件,建立一个简单界面编程的框架. 第1个文件:NotHelloWorldComponent.java //NotHelloWorldComponent.java 1 import java.awt.*; 2 import java.awt.geom.*; 3 import javax.swing.*; 4 5 public class NotHelloWorldComponent extends JComponent { 6 public static final

java界面编程(1) ------ Swing基础

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 最近想学下java的界面编程,在此记录下.    大多数的Swing应用都被构建在基础的JFrame内部,JFrame在你作用的任何操作系统中都可以创建视窗应用. 看如下一个最简单的JFrame例子: JFrame frame = new JFrame("Hello Swing"); frame.setDefaultCloseOperation(JFrame.EXIT

java界面编程(2) ------ 按钮,文本输入框和文本区域

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 上节创建了视窗,这是其他组件的容器,这节就来创建按钮. 创建按钮,只需要在希望出现的地方调用JButton的构造器即可. JButton是一个组件,它有自己的小窗口,能作为整个更新过程的一部分而自动被重绘.也就是说,你不必显示绘制一个按钮或者别的类型的控件,只要将其放在窗体上,它们可以自动绘制自己.采用上节的例子,在其基础上修改如下: public class SwingTes

java 界面编程

转载之u010345869的博客,这里学习下 /* * java复选框和单选按钮 */ import javax.swing.*; import java.awt.*; public class Test0 extends JFrame{ JList jlist; //列表框 JComboBox jcb; //下拉框 JPanel jp1, jp2; //面板 JLabel jlb1, jlb2; JScrollPane jsp; //滚动控件 //构造函数 public Test0(){ jp

Swing:关于Java界面编程的第一课,如何正确的处理界面中的线程

转载:http://blog.csdn.net/sunyiz/article/details/8004573 关于 Java 的 GUI ,关于 Swing,其实有一件事情是非常重要的 那就是线程! 如何正确的使用 GUI 线程, 什么样的代码应该在 GUI 线程上执行? 什么样的代码应该用其他线程执行? 其实这些都很重要, 但是,很多关于 Java 的教材都没有强调过这些,甚至有的书完全就忽略了这一点 所以,我在这里要给所以开始接触 Swing 的人,讲述一个重要概念: Swing 中的线程

java界面编程(下)

一.事件监听 package com.lost.ActionEvent; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.Wind

java界面编程(3) ------ 控制布局

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 在java 中,组件放置在窗体上的方式可能与其他的GUI系统都不相同.首先,它完全基于代码,没有用来控制组件布置的"资源".第二,组件旋转在窗体上的方式不是通过绝对坐标控制,而是由"布局管理器"根据组件加入的顺序决定位置.使用不同的布局管理器,组件的大小,形状和位置将大不相同,此外,布局管理器还可以适应applet或应用程序窗口的大小,所以如果窗口