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 中的 匿名类
什么是内部类? 在一个类中定义另一个类,这样定义的类称为内部类.包含内部类的类称为内部类的外部类. 如果想要通过一个类来使用另一个类,可以定义为内部类. 内部类的外部类的成员变量在内部类仍然有效,内部 ...
随机推荐
- [整]C#获得程序路径
// 获取程序的基目录.System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径.System.Diagnostics.Process.Get ...
- spring mvc与mybatis收集到博客
mybaits-spring 官方教程 http://mybatis.github.io/spring/zh/ SpringMVC 基础教程 框架分析 http://blog.csdn.net/swi ...
- sdut 2605 A^X mod P
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2605 这个题卡的是优化,直观解法是在求x^y时 ...
- RHEL 6.3安装(超级详细图解教程)[转载]
附:RHEL6.3下载地址 32位:http://rhel.ieesee.net/uingei/rhel-server-6.3-i386-dvd.iso 64位:http://rhel.iee ...
- superobject中 JavaToDelphiDateTime的使用
procedure TForm1.FormCreate(Sender: TObject); var n: TDateTime; i64: Int64; s: Integer; begin Memo1. ...
- Convert.ToInt16 与 Convert.ToInt32 区别
取值的范围不同: int16:-32768 到 32767 int32:-2,147,483,648 到 2,147,483,647
- 怎么用navicat自动备份mysql数据库
打开navicat客户端,连上mysql后,双击左边你想要备份的数据库.点击“计划”,再点击“新建批处理作业”. 双击上面的可用任务,它就会到下面的列表里去,代表你选择了这个任务. 点击保存, ...
- eval函数的缺陷
1.今天在维护产品目录的时候,发现了个奇葩的事情,eval函数转换出错,查验之后发现字符串中如果加入了换行符就会导致该问题. 2.测试程序 info.file [{productDirIds:'1', ...
- 如何获取google可以访问的IP地址
由于某些原因,google的部分网站无法打开,导致我们的好些资源都无法找到,今天在网上看到一篇文件,教大家如何能找到可以访问的google. 假如我们需要访问的是:https://code.googl ...
- java基础之 泛型
泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法 ...