最近几天学了一点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);
}
}
}
}