这篇文章是由自己的学习笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020

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

1. button

   Swing提供了很多类型的button,有普通的button,复选框,单选等button,甚至菜单项,全部的这些button都是从AbstractButton继承而来。

例如以下图的继承关系:

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

  这里就列出了全部的button,以下就演示各个button的使用方法,这里不再实现监听器。能够依据须要自己加入。

public class Buttons extends JFrame {

	private JButton jb = new JButton("button");

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

  执行。例如以下图效果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamVzc29uMjAxMjEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

  这里不过将这些button显示在窗口上。并没有给各个组件加入事件监听器。

2.button组

  要想让单选button表现出某种"排他"行为,必须把它们增加到一个"button组(ButtonGroup)"中,事实上,不论什么AbstarctButton对象都能够增加到button组中。

为了避免反复的代码,以下的样例使用反射功能来产生几组不同的类型的button。

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()方法,是用来创建一个button组和一个JPanel,此方法的第二个參数是一个字符串数据,针对当中每一个字符串,将创建一个由第一个參数所代表的button实例,然后将此button增加到JPanel中。

执行程序,效果例如以下:

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

要想通过button得到“排他”行为。就得先创建一个button组,然后把你希望具有的“排他”行为的button增加到这个button组中。执行程序。能够发现除了JButton以外,其它button都具有这样的“排他”的行为。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

java编程接口(5) ------ button和button组的更多相关文章

  1. java编程接口(6) ------ 图标

    本文提出了自己的学习笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 能够在JLable或者不论什么从AbstractButton继承的组件使用Ic ...

  2. java编程接口(1) ------ Swing基金会

    本文提出了自己的学习笔记.欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 近期想学下java的界面编程,在此记录下.    大多数的Swing应用都被构 ...

  3. JAVA编程中button按钮,actionlistener和mouseClicked区别

    在java的编程中,对于按钮button 有两个事件: 1.actionPerformed 2.mouseClicked 区别: actionPerformed:一般事件,仅侦听鼠标左键的单击事件,右 ...

  4. Java编程的逻辑 (19) - 接口的本质

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  5. java编程思想第九章接口

    9.1抽象类和抽象方法 为什么要有抽象类? 是希望通过通用接口操作一系列类. 那么抽象类的形式是什么样的呢? 声明类的使用使用abstract关键字,且在该类中应该具有抽象方法. 注:抽象方法被关键字 ...

  6. JAVA面向接口的编程思想与具体实现

    面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是没有什么觉得需要怀疑的.        问题是在实际的项目开发中我们是怎么体现的呢? 难道就是每一个实现都提供一个接口就了 ...

  7. Java 虚拟机编程接口JVMIT

    JVMTI(JVM Tool Interface)是 Java 虚拟机所提供的 native 编程接口,是 JVMPI(Java Virtual Machine Profiler Interface) ...

  8. Java链式编程接口

    在android开发中显示一个AlertDialog时,常采用下列的写法: new AlertDialog.Builder(getApplicationContext()) .setTitle(&qu ...

  9. JAVA 编程规范(上)

    2016-03-20 J120-CHARLIEPAN JAVA 编程规范(上) 1.      应用范围 本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JA ...

随机推荐

  1. 栈上分配存储器的方法 alloca 抽样

    声明一个局部变量,必须分配在堆栈上,但有或没有它的方法 当然,,那是 alloca 下面的代码显示了可变长度参数转换,alloca 要使用 int main(int argc, char ** arg ...

  2. 2014阿里巴巴web前实习生项目分析(1)

    以下简化CSS代码: div.container{ width:500px; background-image:url(/img/sprite.png); background-repeat:no-r ...

  3. Source insight 3572安装和版本号An invalid source insight serial number was detected解

    Source insight最新版本3572 下载链接:http://www.sourceinsight.com/down35.html,   http://www.sourceinsight.com ...

  4. SQL -- 是否或推断线相交以在其内部的平面

    SQL如下面: update mapping_nj_roads set municipality='227' from mapping_geodata_boundary a where a.suppo ...

  5. MVC常用特性

    MVC常用特性使用   简介 在以前的文章中,我和大家讨论如何用SingalR和数据库通知来完成一个消息监控应用. 在上一篇文章中,我介绍了如何在MVC中对MongoDB进行CRUD操作. 今天,我将 ...

  6. SharePoint 2010 Form Authentication (SQL) based on existing database

    SharePoint 2010 表单认证,基于现有数据库的用户信息表 本文主要描写叙述本人配置过程中涉及到的步骤,仅作为參考,不要仅限于此步骤. 另外本文通俗易懂,适合大众口味儿. I. 开启并配置基 ...

  7. table在 点击线条颜色

    效果图: <html> <head> <meta http-equiv="Content-Type" content="text/html; ...

  8. SQL Server 数据库索引

    原文:SQL Server 数据库索引 一.什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用[索引] 索引允许SQL Server在表中查找数据而不需要扫描整个表. 1.1.索引的好处: ...

  9. [LeetCode] Longest Palindrome Substring 具体分析

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  10. 设计模式之空对象(Null Object)模式

    通过引用Null Object,用于取消业务逻辑中对对象的为空推断 类图: Nullable: package com.demo.user; public interface Nullable { b ...