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 ...
随机推荐
- 探索Windows Azure 监控和自动伸缩系列2 - 获取虚拟机的监控定义和监控数据
上一篇博文介绍了如何连接Windows Azure: http://www.cnblogs.com/teld/p/5113063.html 本篇我们继续上次的示例代码,获取虚拟机的监控定义和监控数据. ...
- ExtJs--02--MessageBox相关弹出窗口alert,prompt,confirm采用
/* Ext.onReady(function(){ Ext.MessageBox.alert("jack","tom"); Ext.MessageBox.al ...
- EJB(一)认识ejb
什么是ejb? 相同仍旧在这个系列博客之处,谈谈对ejb的认识和理解. sun微公司对于ejb的定义大体是这种,ejb是一套用于开发和部署分布式组件的的架构.採用ejb的架构应用能够是 ...
- Sonar——代码质量管理平台
Sonar——代码质量管理平台 一.基本认识 Sonar (SonarQube)是一个开源平台,用于管理源代码的质量. Sonar 不只是一个质量数据报告工具,更是代码质量管理平台.通过插件机制,So ...
- 定向爬虫之爬一爬各个学校新闻的认识(【1】对Url的认识)
昨天早上,我习惯性的打开博客园,看一看别人的写的博客.突然想起,自己好像没有写过什么博客,所以就心血来潮,把我现在做得事情写出来, 这也是对我目前的学习的一种总结.望大神指点.... 对于一间学校的新 ...
- 《Swift程序设计语言》中国翻译和学习笔记page23
·<The Swift Programming Language>中文翻译及读书笔记,附件中为英文原版教程 因21页之前内容和技术关系不大,不做翻译整理,从第21页開始 · 页 1 本页主 ...
- SQL Server BCP使用小结
原文:SQL Server BCP使用小结 用法: bcp {dbtable ) );GO--输出XML格式化文件--说明一下:-t","是指定字段分隔符,稍后我们会讲到exe ...
- python2.7和 python3.4但是不要
很多 Python 刚開始学习的人想知道他们应该从 Python 的哪个版本号開始学习.对于这个问题我的答案是 "你学习你喜欢的教程的版本号.然后检查他们之间的不同. " 可是假设 ...
- STL algorithm算法min,min_element(35)
min样板: std::min C++98 C++11 C++14 default (1) template <class T> const T& min (const T& ...
- Android Push Notifications using Google Cloud Messaging (GCM), PHP and MySQL
http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php- ...