Java 内部类和匿名类 实现JButton动作 ActionListener类
import javax.swing.*;
import java.awt.*;
import java.awt.event.*; public class ControlCircle2 extends JFrame {
private JButton jbtEnlarge=new JButton("Enlarge");
private JButton jbtShrink=new JButton("Shrink");
private CirclePanel canvas=new CirclePanel(); public ControlCircle2(){
JPanel panel=new JPanel();
panel.add(jbtEnlarge);
panel.add(jbtShrink);
this.add(canvas,BorderLayout.CENTER);
this.add(panel, BorderLayout.SOUTH); jbtEnlarge.addActionListener(new EnlargeListener());
jbtShrink.addActionListener(new ShrinkListener());
} public static void main(String[] args) {
// TODO Auto-generated method stub
ControlCircle2 frame=new ControlCircle2();
frame.setTitle("ControlCircle2");
frame.setSize(200,200);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); }
class ShrinkListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
canvas.shrink();
}
}
class EnlargeListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
canvas.enlarge();
}
} }
class CirclePanel extends JPanel {
private int radius=5;
public void enlarge(){
radius++;
repaint();
}
public void shrink(){
if(radius>=1){
radius--;
repaint();}
else
JOptionPane.showMessageDialog(null, "Radius can not less than 1.");
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.drawOval(getWidth()/2-radius, getHeight()/2,
2*radius, 2*radius);
} }
为了让actionPerformed方法可以访问到canvas变量,将EnlargeListener定义为ControlCircle2类的内部类。
匿名内部类是没有名字的内部类,它一步完成定义内部类和创建一个该类的实例。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*; public class AnonymousListenerDemo extends JFrame {
public AnonymousListenerDemo(){
JButton jbtNew=new JButton("New");
JButton jbtOpen=new JButton("Open");
JButton jbtSave=new JButton("Save");
JButton jbtPrint=new JButton("Print"); JPanel panel=new JPanel();
panel.add(jbtNew);
panel.add(jbtOpen);
panel.add(jbtSave);
panel.add(jbtPrint); add(panel); jbtNew.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println("Process New");
}
});//匿名内部类 jbtOpen.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("Process Open");
}
}); jbtSave.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("Process Save");
}
}); jbtPrint.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("Process Print");
}
});
} public static void main(String[] args) {
// TODO Auto-generated method stub
AnonymousListenerDemo frame=new AnonymousListenerDemo();
frame.setTitle("AnonymousListenerDemo");
frame.pack();//程序没有使用setSize方法来设置框架的大小,而是使用pack方法,可以根据组件的大小来自动调整框架的大小。
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); } }
还可以只使用一个actionListener,通过获取ActionEvent的类别,来触发相应的动作。
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jbtNew)//使用getSource方法,获得事件的对象,然后使用对应的动作。
{System.out.println("Process New");
JOptionPane.showMessageDialog(null, "Process New");}
else if(e.getSource()==jbtOpen)
{System.out.println("Process Open");
JOptionPane.showMessageDialog(null, "Process Open");}
else if(e.getSource()==jbtSave)
{System.out.println("Process Save");
JOptionPane.showMessageDialog(null, "Process Save");}
else if(e.getSource()==jbtPrint)
{System.out.println("Process Print");
JOptionPane.showMessageDialog(null, "Process Print");}
}
}
Java 内部类和匿名类 实现JButton动作 ActionListener类的更多相关文章
- java内部类以及匿名类
内部类 一个类内部定义的类称为内部类. 内部类允许把逻辑相关的类组织在一起,并控制内部代码的可视性. 内部类与外部类的结构层次如下. 顶层类:最外层的类 外部类:内部类所在的类 内部类:类内部定义的类 ...
- 【转】Java中的内部类和匿名类
Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的 ...
- Java 内部类、成员类、局部类、匿名类等
Java各种称呼类详解 Java有各种各样类,内部类.嵌套类.成员类.局部类(本地类).静态类.匿名类.文件类以及这些组合起来的称呼类,成员内部类,成员匿名类,成员嵌套类,本地匿名类等,真是多的不行, ...
- Java 内部类,成员类,局部类,匿名类等
根据内部类的位置不同,可将内部类分为 :成员内部类与局部内部类. class outer{ class inner{//成员内部类 } public void method() { class loc ...
- 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类
---------- android培训.java培训.期待与您交流! ---------- 一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对 ...
- Java学习(匿名对象、内部类、包、import、代码块)
一.匿名对象 概念:匿名对象是指在创建对象时,只有创建的语句,却没有把对象地址值赋给某个变量. 特点: (1)匿名对象直接使用,没有变量名.当做形参使用. new Person().name=&quo ...
- java内部类和异常类的概念
1.内部类的外嵌类的成员变量在内部类中任然有效,内部类中的方法也可以调用外嵌类中的 方法,内部类中不可以声明类的变量和方法,外嵌的类体可以用内部类声明对象,作为外嵌类的成员.内部类仅供他的外嵌类使用. ...
- java 内部类、匿名内部类、嵌套类的使用
我们都知道java的类能够由public.default(缺省.不写)来修饰,分别表示的含义是同意公开訪问以及仅仅同意包内其他类訪问,而同一包内的类一般是为完毕同一个功能而协作. 除此之外, ...
- Java 中的 匿名类
什么是内部类? 在一个类中定义另一个类,这样定义的类称为内部类.包含内部类的类称为内部类的外部类. 如果想要通过一个类来使用另一个类,可以定义为内部类. 内部类的外部类的成员变量在内部类仍然有效,内部 ...
随机推荐
- Servlet页面跳转实现方法的区别
一直对Servlet页面跳转的几种方式理解的糊里糊涂的,今天在网上搜了一把,找到一遍比较好的,记下来,以后看看. Servlet页面跳转分两部分,一是发生在Servlet,一是在JSP,其实JSP也就 ...
- .net调用存储过程碰到的一个问题
问题描述 报错信息如下: Execution of user code in the .NET Framework is disabled. Enable "clr enabled" ...
- java面向对象编程——第二章 java基础语法
第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...
- 关于jquery计算页面元素数量
这段jquery计算页面元素数量代码,能不能刷新页面直接输出数量,而不用点计算按钮 <scriptsrc="http://ajax.googleapis.com/ajax/libs/j ...
- HDU 2795 单点更新,区间优先查找(想法)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- IT公司100题-8-智力题
问题1: 有两个房间,一间房里有三盏灯,另一间房有控制着三盏灯的三个开关, 这两个房间是分割开的,从一间里不能看到另一间的情况. 现在要求受训者分别进这两房间一次,然后判断出这三盏灯分别是由哪个开关控 ...
- fragment 添加menu
http://bbs.51cto.com/thread-1091458-1-1.html 有详解 @Override public void onCreate(Bundle savedInstance ...
- CentOS 6.4 U盘启动问题的解决
替换syslinux/目录下的vesamenu.c32文件. 下载地址: http://pan.baidu.com/s/1mg8xce8
- Android手机号码不是所有的都能获取
手机号码不是所有的都能获取.只是有一部分可以拿到.这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码 ...
- sql学习资料
http://blog.sina.com.cn/s/articlelist_1594135432_9_1.html