画板算是我在学习java过程中第一个完成的迷你项目,现在总结一下它。
画板实现的第一步就是定义一个JFrame,作为放置按钮以及画布的容器,同时设置它的相关属性:
setTitle("画板");
setSize(600, 600);
this.setDefaultCloseOperation(3);
this.setResizable(false);
this.setLocationRelativeTo(null);
// this.setLayout(new FlowLayout());
this.setLayout(null);
this.setBackground(Color.WHITE);
接下来定义一个JPanel,并设置它在JFrame中的坐标位置,以及它的行列数目
JPanel panel = new JPanel();
panel.setBounds(0, 0, 600, 100);
panel.setBackground(Color.WHITE);
panel.setLayout(new GridLayout(2, 5));
this.add(panel);
drawpanel.setBounds(0, 100, 600, 500);
drawpanel.setBackground(Color.WHITE);
this.add(drawpanel);
之后在面板上添加相应的按钮,我制作的按钮有九个:
JButton btn = new JButton("直线");
btn.setActionCommand("Line");
panel.add(btn);
JButton btn1 = new JButton("曲线");
btn1.setActionCommand("Curve");
panel.add(btn1);
JButton btn2 = new JButton("颜色");
btn2.setActionCommand("Color");
panel.add(btn2);
JButton btn3 = new JButton("圆");
btn3.setActionCommand("Circle");
panel.add(btn3);
JButton btn4 = new JButton("矩形");
btn4.setActionCommand("Rectangle");
panel.add(btn4);
JButton btn5 = new JButton("填充圆");
btn5.setActionCommand("FillCircle");
panel.add(btn5);
JButton btn6 = new JButton("填充矩形");
btn6.setActionCommand("FillRectangle");
panel.add(btn6);
JButton btn7 = new JButton("橡皮");
btn7.setActionCommand("Eraser");
panel.add(btn7);
JButton btn8 = new JButton("图片");
btn8.setActionCommand("Picture");
panel.add(btn8);
写好面板上的内容之后,就可以添加动作监听器了,也就是作为点击按钮之后的事件处理动作
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Color")) {
color = javax.swing.JColorChooser.showDialog(null, "颜色选择器",
Color.BLACK);
System.out.println("你选择的颜色是" + color);
} else {
Item = e.getActionCommand();
System.out.println("你选择的按钮是:" + Item);
System.out.println("现在队列中有" + DrawListener.stl.size()
+ "个对象");
}
}
};
btn1.addActionListener(al);
btn2.addActionListener(al);
btn3.addActionListener(al);
btn4.addActionListener(al);
btn5.addActionListener(al);
btn6.addActionListener(al);
btn7.addActionListener(al);
btn8.addActionListener(al);
drawpanel.addMouseListener(dl);
drawpanel.addMouseMotionListener(dl);
this.df = df;
g = drawpanel.getGraphics();
this.drawpanel = drawpanel;
}
x1 = e.getX();
y1 = e.getY();
}
x2 = e.getX();
y2 = e.getY();
g.setColor(df.getColor());
color = g.getColor();
if(df.getItem().equals("Line")){
g.drawLine(x1, y1, x2, y2);
Shapes shape = new Shapes(color, df.getItem(), x1, y1, x2, y2);
stl.add(shape);
}
if(df.getItem().equals("Circle")){
g.drawOval(x1, y1, x2, y2);
Shapes shape = new Shapes(color, df.getItem(), x1, y1, x2, y2);
stl.add(shape);
}
if(df.getItem().equals("Rectangle")){
g.drawRect(x1, y1, x2, y2);
Shapes shape = new Shapes(color, df.getItem(), x1, y1, x2, y2);
stl.add(shape);
}
if(df.getItem().equals("FillCircle")){
g.fillOval(x1, y1, x2, y2);
Shapes shape = new Shapes(color, df.getItem(), x1, y1, x2, y2);
stl.add(shape);
}
if(df.getItem().equals("FillRectangle")){
g.fillRect(x1, y1, x2, y2);
Shapes shape = new Shapes(color, df.getItem(), x1, y1, x2, y2);
stl.add(shape);
}
if(df.getItem().equals("Picture")){
image = Toolkit.getDefaultToolkit().getImage ("C://workspaces//JavaLessons//src//cn//wx//Excise6//leaf.jpg");
g.drawImage(image, x1, y1, 100, 100, df.getBackground(), df);
Shapes shape = new Shapes(color, df.getItem(), x1, y1, x2, y2);
stl.add(shape);
}
}
x2 = e.getX();
y2 = e.getY();
g.setColor(df.getColor());
if(df.getItem().equals("Curve")){
g.drawLine(x1, y1, x2, y2);
Shapes shape = new Shapes(color, df.getItem(), x1, y1, x2, y2);
stl.add(shape);
x1 = x2;
y1 = y2;
}
}
x2 = e.getX();
y2 = e.getY();
if(df.getItem().equals("Eraser")){
g.setColor(Color.WHITE);
g.clearRect(x1, y1, 100, 100);
Shapes shape = new Shapes(color, df.getItem(), x1, y1, 100, 100);
stl.add(shape);
x1 = x2;
y1 = y2;
}
}
//添加对象
public void add(E e);
//根据索引返回对象值
public E get(int index);
//得到队列长度
public int size();
//在指定位置插入一个对象
public void insert(int index,E e);
//删除一个对象,并返回值
public E delete(int index);
//在队列的尾部添加另一队列的所有对象
public void addAll(STList<E> list);
private Object [] obl = new Object[0];
private int size = obl.length;
//添加对象
public void add(E e){
Object [] temp = new Object[obl.length+1];
temp[obl.length] = e;
System.arraycopy(obl, 0, temp, 0, obl.length);
obl = temp;
}
//根据索引返回对象值
public E get(int index){
E e = (E) obl[index];//转型
return e;
}
//得到队列长度
public int size(){
return obl.length;
}
//在队列的尾部添加另一队列的所有对象
public void addAll(STList<E> list){
Object [] temp = new Object[obl.length+list.size()];
System.arraycopy(obl, 0, temp, 0, obl.length);
System.arraycopy(list, 0, temp, obl.length, list.size());
this.size = obl.length+list.size();
obl = temp;
}
//在指定位置插入一个对象
public void insert(int index,E e){
Object [] temp = new Object[obl.length];
System.arraycopy(obl, index, temp, 0, obl.length-index);
for(int i=index;i<obl.length;i++){
obl[i] = null;
}
obl[index] = e;
this.size++;
System.arraycopy(temp, 0, obl, index+1, temp.length);
}
//删除一个对象,并返回值
public E delete(int index){
E e = (E) obl[index];
for(int i=index;i<obl.length;i++){
obl[i] = obl[i+1];
}
this.size--;
return e;
}
public void show(){
System.out.println(obl);
}
private int x1,y1,x2,y2;
private Color color;
private String item;
public Shapes(Color color,String item,int x1,int y1,int x2,int y2){
this.color=color;
this.item=item;
this.x1=x1;
this.y1=y1;
this.x2=x2;
this.y2=y2;
}
public int getX1() {
return x1;
}
public void setX1(int x1) {
this.x1 = x1;
}
public int getY1() {
return y1;
}
public void setY1(int y1) {
this.y1 = y1;
}
public int getX2() {
return x2;
}
public void setX2(int x2) {
this.x2 = x2;
}
public int getY2() {
return y2;
}
public void setY2(int y2) {
this.y2 = y2;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
public void paint(Graphics g) {
super.paint(g);
if (null != DrawListener.stl) {
// 取出队列中保存信息
for (int i = 0; i < DrawListener.stl.size(); i++) {
Shapes sp = DrawListener.stl.get(i);
Color c = sp.getColor();
if (sp.getItem().equals("Line")|| sp.getItem().equals("Curve")) {
g.setColor(c);
g.drawLine(sp.getX1(), sp.getY1(), sp.getX2(), sp.getY2());
g.setColor(c);
g.drawRect(sp.getX1(), sp.getY1(), sp.getX2(), sp.getY2());
g.setColor(c);
g.drawOval(sp.getX1(), sp.getY1(), sp.getX2(), sp.getY2());
g.setColor(c);
g.fillOval(sp.getX1(), sp.getY1(), sp.getX2(), sp.getY2());
g.setColor(c);
g.fillRect(sp.getX1(), sp.getY1(), sp.getX2(), sp.getY2());
g.setColor(c);
g.clearRect(sp.getX1(), sp.getY1(),sp.getX2(),sp.getY2());
} /**else if (sp.getItem().equals("Picture")) {
image = Toolkit.getDefaultToolkit().getImage("C://workspaces//JavaLessons//src//cn//wx//Excise6//leaf");
g.drawImage(image, sp.getX1(), sp.getY1(), 100, 100,df.getBackground(),df);
}*/
}
}
};