java编程接口(5) ------ button和button组
这篇文章是由自己的学习笔记,欢迎转载,但请注明出处: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组的更多相关文章
- java编程接口(6) ------ 图标
本文提出了自己的学习笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 能够在JLable或者不论什么从AbstractButton继承的组件使用Ic ...
- java编程接口(1) ------ Swing基金会
本文提出了自己的学习笔记.欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 近期想学下java的界面编程,在此记录下. 大多数的Swing应用都被构 ...
- JAVA编程中button按钮,actionlistener和mouseClicked区别
在java的编程中,对于按钮button 有两个事件: 1.actionPerformed 2.mouseClicked 区别: actionPerformed:一般事件,仅侦听鼠标左键的单击事件,右 ...
- Java编程的逻辑 (19) - 接口的本质
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- java编程思想第九章接口
9.1抽象类和抽象方法 为什么要有抽象类? 是希望通过通用接口操作一系列类. 那么抽象类的形式是什么样的呢? 声明类的使用使用abstract关键字,且在该类中应该具有抽象方法. 注:抽象方法被关键字 ...
- JAVA面向接口的编程思想与具体实现
面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是没有什么觉得需要怀疑的. 问题是在实际的项目开发中我们是怎么体现的呢? 难道就是每一个实现都提供一个接口就了 ...
- Java 虚拟机编程接口JVMIT
JVMTI(JVM Tool Interface)是 Java 虚拟机所提供的 native 编程接口,是 JVMPI(Java Virtual Machine Profiler Interface) ...
- Java链式编程接口
在android开发中显示一个AlertDialog时,常采用下列的写法: new AlertDialog.Builder(getApplicationContext()) .setTitle(&qu ...
- JAVA 编程规范(上)
2016-03-20 J120-CHARLIEPAN JAVA 编程规范(上) 1. 应用范围 本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JA ...
随机推荐
- C#枚举数和迭代器
大道至简,始终认为简洁是一门优秀的编程语言的一个必要条件.相对来说,C#是比较简洁的,也越来越简洁.在C#中,一个关键字或者语法糖在编译器层面为我们做了很多乏味的工作,可能实现的是一个设计模式,甚至是 ...
- 何时使用SET和SELECT为变量赋值
原文:何时使用SET和SELECT为变量赋值 我们经常使用SET和SELECT来为变量复制,但是有时候,只能选其一来使用,下面来看看这些例子,本例中使用AdventureWorks数据库来做演示. 通 ...
- ThreadPoolExecutor的一点理解
整个ThreadPoolExecutor的任务处理有4步操作: 第一步,初始的poolSize < corePoolSize,提交的runnable任务,会直接做为new一个Thread的参数, ...
- java注意事项演示 地图产生表 演示样本 来自thinking in java 4 20代码的章
java注意事项演示 地图产生表 演示样本 来自thinking in java 4 20代码的章 thinking in java 4免费下载:http://download.csdn.net/d ...
- Unity3d 网络编程(三)(Unity3d内置简单的网络server编制)
使用Unity3d内置的网络建立一个简单的server.主机时,请使用机器.创建一个client连接到本机. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv ...
- Oracle SQL 调优健康检查脚本
Oracle SQL 调优健康检查脚本 我们关注数据库系统的性能,进行数据库调优的主要工作就是进行SQL的优化.良好的数据架构设计.配合应用系统中间件和写一手漂亮的SQL,是未来系统上线后不出现致命性 ...
- SQL 2008执行语句遇到内存不足(1)——error 701
原文:SQL 2008执行语句遇到内存不足(1)--error 701 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/01/17/sql-2008-e ...
- cocos2dx --- button点击放大中心
自定义简单button,直接附着到代码: MenuItem* MenuItemNode::create( const char* normal,Ref* target,SEL_MenuHandler ...
- PC远程调试设备(转)
我们在移动端进行前端开发时,会遇到一个让人头痛但不得不面对的问题——调试. 在 PC 机器上,我们有功能强大的 Chrome DevTools.Firebug,即便是老版本的 IE ,我们也可以安装微 ...
- 先锋军Android注射技术《三》
继续 于<两>通过专门出台ptrace实施注射的技术解决方案,在这一章,我就为大家介绍一Android在独特的喷射技术,我点了他的名字--Component Injection.顾名思义. ...