码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-11-16 00:36:07      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:java界面编程   按钮   按钮组   

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

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

1. 按钮

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

bubuko.com,布布扣

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

bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣

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

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();
	}

}
  运行,如下图效果:

bubuko.com,布布扣

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

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中。

         运行程序,效果如下:

bubuko.com,布布扣

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

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


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

标签:java界面编程   按钮   按钮组   

原文地址:http://blog.csdn.net/jesson20121020/article/details/41144185

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!