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类的更多相关文章

  1. java内部类以及匿名类

    内部类 一个类内部定义的类称为内部类. 内部类允许把逻辑相关的类组织在一起,并控制内部代码的可视性. 内部类与外部类的结构层次如下. 顶层类:最外层的类 外部类:内部类所在的类 内部类:类内部定义的类 ...

  2. 【转】Java中的内部类和匿名类

       Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的 ...

  3. Java 内部类、成员类、局部类、匿名类等

    Java各种称呼类详解 Java有各种各样类,内部类.嵌套类.成员类.局部类(本地类).静态类.匿名类.文件类以及这些组合起来的称呼类,成员内部类,成员匿名类,成员嵌套类,本地匿名类等,真是多的不行, ...

  4. Java 内部类,成员类,局部类,匿名类等

    根据内部类的位置不同,可将内部类分为 :成员内部类与局部内部类. class outer{ class inner{//成员内部类 } public void method() { class loc ...

  5. 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类

    ---------- android培训.java培训.期待与您交流! ---------- 一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对 ...

  6. Java学习(匿名对象、内部类、包、import、代码块)

    一.匿名对象 概念:匿名对象是指在创建对象时,只有创建的语句,却没有把对象地址值赋给某个变量. 特点: (1)匿名对象直接使用,没有变量名.当做形参使用. new Person().name=&quo ...

  7. java内部类和异常类的概念

    1.内部类的外嵌类的成员变量在内部类中任然有效,内部类中的方法也可以调用外嵌类中的 方法,内部类中不可以声明类的变量和方法,外嵌的类体可以用内部类声明对象,作为外嵌类的成员.内部类仅供他的外嵌类使用. ...

  8. java 内部类、匿名内部类、嵌套类的使用

    我们都知道java的类能够由public.default(缺省.不写)来修饰,分别表示的含义是同意公开訪问以及仅仅同意包内其他类訪问,而同一包内的类一般是为完毕同一个功能而协作.      除此之外, ...

  9. Java 中的 匿名类

    什么是内部类? 在一个类中定义另一个类,这样定义的类称为内部类.包含内部类的类称为内部类的外部类. 如果想要通过一个类来使用另一个类,可以定义为内部类. 内部类的外部类的成员变量在内部类仍然有效,内部 ...

随机推荐

  1. 基于Storm的工程中使用log4j

    最近使用Storm开发,发现log4j死活打不出debug级别的日志,网上搜到的关于log4j配置的方法都试过了,均无效. 最终发现问题是这样的:最新的storm使用的日志系统已经从log4j切换到了 ...

  2. qml的打包问题

    qml2的打包问题: 相对于早期的项目,只需要打包plugin和动态库.带有sqlite的程序如果需要打包,需要打包如下东西: 1.打包AppData目录下的  Local/Qt Project/项目 ...

  3. c++自己困惑之处

    1 typedef 可以把类型名重命名. 例如 typedef int my_i; my_i a; a为整型变量. typedef struct node *tree;       struct no ...

  4. hdu 4622 Reincarnation

    http://acm.hdu.edu.cn/showproblem.php?pid=4622 用字典树把每一个字符串对应成一个整数 相同的字符串对应到相同的整数上 把所用的串对应的整数放在一个数组里 ...

  5. not use jquery

    document.getElementById('myElement');document.querySelector('#myElement'); document.getElementsByCla ...

  6. 端午小长假--前端基础学起来04CSS选择器

    定义: 选择器{ 样式: } 选择器指明{}中的样式的作用对象,即作用于网页中的哪些元素 <head><meta http-equiv="Content-Type" ...

  7. mybatis中oracle in>1000的处理

    oracle数据库中,如果你使用in,然后括号对应的是一个子查询,当查询出来的结果>1000的时候就会报错. 这个是数据库的规定,我们无法改变它. 如何解决这个问题呢? 现在我看到了三种解决方式 ...

  8. ODI 12.1.3发布,提升支持大数据的能力

    此次发布的ODI新版本,目的是更好的支持当前市场上的大数据平台. 大数据基因在不改变ODI工作效率的情况下,ODI增加了越来越多的数据源集成能力.ODI是在Oracle平台上标准的E-LT工具,事实上 ...

  9. MongoDB C#驱动中Query几个方法 (转)

    Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.And(Query.EQ("nam ...

  10. linux学习笔记3:linux的网络配置,rpm包,shell以及samba服务器的使用和安装

    1.linux下的shell<linux命令.编辑器和shell编程> (1)shell种类有很多,常用的有三种,在linux可以通过ls -l /bin/*sh 来显示所有已安装的she ...