第一个简单java程序的实现

最近几天学了一点java,于是乎写了一个运用性很强的画板给自己试试水。。。
可以把主体分成这三个大知识点吧:

  • 类与对象
  • 类的继承和接口
  • 监听器的使用(Listener)

大概梳理一下:

类与对象

众所周知,java是一门面向对象的语言。大概意思是说:
类:
类是创建对象的模板和蓝图,是一组类似对象的共同抽象定义。类是一个抽象的概念,不是一个具体的东西。
对象:
对象是类的实例化结果,是实实在在的存在,代表现实世界的某一事物。

先有类,再由类来构造对象。
tryenough这里有更详细的解释。

类的继承和接口

而在java中类(Class)之间可以相互继承,其中被继承的一方叫做父类,继承的一方叫子类。注意,一个类只能继承唯一一个另一个类

如此看来,java并不支持多重继承。
既然Java不支持多重继承,那我们遇到需要使用多重继承来解决的问题,我们又该怎么办呢?为此,Java提出了接口(interface)的思想,接口本质上也是一个类,只不过它所有的方法都是抽象的,也就是说所有的方法都只是做了声明而没有具体的实现内容。

其中继承的关键词是extends,接口的关键词是implements。

监听器

https://blog.csdn.net/tfygg/article/details/51638933看到一篇文章,讲的还挺清晰的。
总结一下监听器的大概运作原理如下:
1、给事件源注册监听器
2、组件接受外部作用,也就是事件被触发
3、组件产生一个相应的事件对象,并把此对象传递给与之关联的事件处理器
4、事件处理器启动,并执行相关的代码来处理该事件。

具体实现将以画板的实例代码作为案例

//新建一个继承JPanel类(容器)的画板类
public class Draw extends javax.swing.JPanel{
//
	private static final long serialVersionUID = 1L;

	public static void main(String[] args) {
		Draw sample = new Draw();
		sample.showUI();
	}
	private Shape[] shape;
	
	public void showUI(){
		JFrame jf = new JFrame();
		jf.setTitle("My Draw Board");
		jf.setSize(800,600);
		jf.setLocationRelativeTo(null);
		jf.setResizable(false);
		jf.setDefaultCloseOperation(3);
		
		java.awt.BorderLayout bl = new java.awt.BorderLayout();
		jf.setLayout(bl);
		
		DrawListener dlis = new DrawListener();
		
		JPanel jp = new JPanel();
		jp.setBackground(Color.BLACK);
		jp.setPreferredSize(new Dimension(0, 50));
		jf.add(jp,BorderLayout.NORTH);
		
		javax.swing.JButton ud = new javax.swing.JButton("user-defined");
		ud.addActionListener(dlis);
		jp.add(ud);
		
		javax.swing.JButton line = new javax.swing.JButton("line");
		line.addActionListener(dlis);
		jp.add(line);
		
		javax.swing.JButton trian = new javax.swing.JButton("triangle");
		trian.addActionListener(dlis);
		jp.add(trian);
		
		javax.swing.JButton plg = new javax.swing.JButton("polygon");
		plg.addActionListener(dlis);
		jp.add(plg);
		
		JPanel jp2 = new JPanel();
		jp2.setBackground(Color.BLACK);
		jp2.setPreferredSize(new Dimension(0, 50));
		jf.add(jp2,BorderLayout.SOUTH);
		
		Color[] color = {Color.RED,Color.GREEN,Color.BLUE,new Color(0, 0, 0)};
		for(int i=0;i<color.length;i++){
			JButton jbu = new JButton();
			jbu.setBackground(color[i]);
			jbu.setPreferredSize(new Dimension(30, 30));
			jp2.add(jbu);
			jbu.addActionListener(dlis);
		}
		
		this.setBackground(Color.WHITE);
		jf.add(this,BorderLayout.CENTER);
		
		jf.setVisible(true);
		
		java.awt.Graphics g = this.getGraphics();
		dlis.setGraphics(g);
		this.addMouseListener(dlis);
		this.addMouseMotionListener(dlis);
		shape = dlis.getShape();
	}
	
	
	public void paint(java.awt.Graphics g){
		super.paint(g);
		
		System.out.println("repaint");
		int num = shape.length;
		for(int i = 0; i < num; i++){
			if(shape[i]!=null){
				shape[i].paint(g);
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值