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. [转]C# 应用程序安装部署步骤,安装前操作,先退出程序后卸载。

    1. 点击[文件]-[新建]-[项目]-其他项目类型-安装和部署,选择安装项目,在下面的名称栏填写SetupTest(或者选择安装向导,一直点击[下一步])2. 安装项目----六个子项依次为:文件系 ...

  2. quartz Web项目基础最简单配置

    web方面的quartz 配置资料,从网上搜索出来的很难找到完整可用的代码样例.自己上传一个. IDE:Intellij tomcat jdk1.7 quartz 2.1.5 这里下载: http:/ ...

  3. (转)mysql的增删改查

    MySQL数据库的增删改查. 1,首先启动mysql数据库的服务,在运行的窗口中输入:net start mysql,这样,就可 以启动mysql数据库的服务,同理,输入net stop mysql, ...

  4. qt 提高ui响应度

    如何使Qt 平台中的GUI保持响应流畅?一般来说耗时较长的操作,分为计算密集型操作和IO密集型操作,对于这两类操作如何提高响应速度. 而从操作的本质上来说,操作又可分为不可分解操作,如在第三方库中耗时 ...

  5. 获取checkbox数组 里面的值

    echo '<td class="text-left"><input  name="tids[]" type="checkbox&q ...

  6. Zone.js

    https://github.com/angular/zone.js/ Zone.js

  7. Delphi 的 7zip 压缩算法

    http://blog.csdn.net/warrially/article/details/8039915

  8. struts中的数据校验

    1.struts中如何进行数据校验 在每一个Action类中,数据校验一般都写在业务方法中,比如login().register()等.struts提供了数据校验功能.每个继承自ActionSuppo ...

  9. HDU 5442 后缀自动机+kmp

    题目大意: 给定一个字符串,可理解成环,然后选定一位置,逆时针或顺时针走一遍,希望得到字典序最大,如果同样大,希望找到起始位置最小的,如果还相同,就默认顺时针 比赛一直因为处理最小位置出错,一结束就想 ...

  10. [转]source inslght使用指导

    作为一个开放源代码的操作系统,Linux附带的源代码库使得广大爱好者有了一个广泛学习.深入钻研的机会,特别是Linux内核的组织极为复杂,同时,又不能像windows平台的程序一样,可以使用集成开发环 ...