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 中的 匿名类
什么是内部类? 在一个类中定义另一个类,这样定义的类称为内部类.包含内部类的类称为内部类的外部类. 如果想要通过一个类来使用另一个类,可以定义为内部类. 内部类的外部类的成员变量在内部类仍然有效,内部 ...
随机推荐
- sqlserver获取表名,字段名
一.获取表的基本信息 SELECT [TableName] = [Tables].name , [TableOwner] = [Schemas].name , [TableCreateDate] = ...
- json_encode时中文编码转正常状态
function json_encode_cn($data) { $data = json_encode($data); return preg_replace("/\\\u([0-9a-f ...
- MyEclipse10.X 的破解过程详细图解
http://wenku.baidu.com/view/423e95056c85ec3a87c2c512.html
- 使用SoundPool播放音效
针对应用程序经常需要播放密集.短促的音效,因为MediaPlayer存在如下缺点: 1.资源占用量较高.延迟时间较长. 2.不支持多个音效同时播放. SoundPool使用音效池的概念来管理多个短促的 ...
- Admob(6.12.x)符号未定义错误的解决方法(IOS)
在升级Admob的SDK版本到6.12.x时, 按照官方文档操作(https://developers.google.com/mobile-ads-sdk/docs/#ios), 添加如下framew ...
- HDU 1698 Just a Hook
题意:初始1-n 值为1,有Q操作,每次可以把一段[l,r] 整段每个值变成 x,问最后的[1,n]总和. 线段树成段更新(基础题) #include<cstdio> #include&l ...
- java.io中流的操作:字节流、字符流
java.io中流的操作:字节流.字符流(1)使用File类打开一个文件(2)通过字节流或字符流的子类指定输出的位置(3)进行读/写操作(4)关闭输入/输出 1.字节流:主要是byte类型数据,以by ...
- (DFS)hdoj1010-Tempter of the Bone
#include<cstdio> #include<cmath> #include<stdlib.h> ][]={{,},{,-},{,},{-,}},escape ...
- [开发笔记]-“在引用COM组件时,出现了无法嵌入互操作类型。。。”的错误
这两天在做一个需要将wps文档转换成word文档的程序,在调用wps的com组件时项目编译是没有问题的,但当运行的时候却弹出了下面的错误提示: 从网上百度一番后,找到了正确的解决方法. 先从Com组件 ...
- 《剑指offer-名企面试官精讲典型编程题》读后感
首先,不得不说这是一本好书!!! 我接触这本书是在学长的推荐下去看的,而且口碑还是挺好的一本书,豆瓣的评分也比较高,当我刚看了它,我就深深的爱上了这本书,到现在为止,我已经看了三遍这本书了,平时无聊时 ...