package com.baidu;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
//继承JFFrame类
public class SimpleDraw extends JFrame{
private String command="直线";
public String getCommand() {
return command;
}
//显示界面的方法
public void showFrame(){
//标题
setTitle("画图板");
//大小
setSize(400,400);
//
setLocationRelativeTo(null);
//关闭程序
setDefaultCloseOperation(3);
//创建流式布局
FlowLayout f=new FlowLayout();
//设置窗口布局
setLayout(f);
//创建按钮
JButton j_line=new JButton("直线");
JButton j_reat=new JButton("矩形");
JButton j_oval=new JButton("椭圆");
JButton j_clos=new JButton("颜色");
add(j_line);
add(j_reat);
add(j_oval);
add(j_clos);
//创建一个匿名内部类新建一个监听器
ActionListener action_list=new ActionListener(){
//实现接口中的抽象方法
public void actionPerformed(ActionEvent e){
//获取命令上的动作命令
command = e.getActionCommand();
}
};
//给直线,矩形,椭圆按钮添加监听器
j_line.addActionListener(action_list);
j_reat.addActionListener(action_list);
j_oval.addActionListener(action_list);
j_clos.addActionListener(action_list);
//关闭
setDefaultCloseOperation(3);
//可见
setVisible(true);
//获取画布对象
//Graphics g=this.getGraphics();
//创建一个鼠标
MouseListener nous=new MyMouseListener(this);
//给窗体添加鼠标动作监听器
addMouseListener(nous);
}
}
2.监听器类
package com.baidu;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MyMouseListener implements MouseListener{
//颜色
Panel p;
//画布
Graphics g;
//动作命令
private SimpleDraw draw;
//给出坐标
private int x1,y1,x2,y2;
//构造方法
public MyMouseListener(SimpleDraw draw){
this.g=draw.getGraphics();//将传过来的对象值赋给属性g
this.draw=draw;
}
//鼠标进入到组件上时调用
@Override
public void mouseClicked(MouseEvent e) {
}
//鼠标离开组件时调用
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
x1=e.getX();
y1=e.getY();
}
@Override
public void mouseReleased(MouseEvent e) {
x2=e.getX();
y2=e.getY();
String command = draw.getCommand();
g.setColor(Color.blue);
if(command.equals("直线")){
g.drawLine(x1, y1, x2, y2);
}else if(command.equals("矩形")){
g.drawRect(x1, y1, x2-x1, y2-y1);
}else if(command.equals("椭圆")){
g.drawOval(x1, y1, x2-x1, y2-y1);
}
}
}
3.测试类
package com.baidu;
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
SimpleDraw sd=new SimpleDraw();
sd.showFrame();
}
}
1.首先我门要创建一个窗体,画图的操作实在窗体中完成的。
定义窗体的名字,和宽度高度。在给窗体设置一个位置,我们用的是显示在屏幕中间,再给窗体一个布局,这里我们采用的是流式布局。
在这之后我门就可以设置按妞了,先创建一个画直线的按钮,把这个按钮添加到窗体上去,然后我们创建一个监听器()实现监听器这个接口的反法,获取命令上的动作。
再给我们画直线的按钮上添加一个监听器;设置窗体为可见,创建一个鼠标事件,然后把这个鼠标动作事件添加到这个窗体上。
最后我们关闭这个窗体;
2.监听器中的实现、
首先我们要继承鼠标动作事件这个接口,实现一个接口就要实现这个接口中的所有方法。建立坐标,x1,x2,y1,y2;在鼠标按下这个方法上面添加x1,y1,的坐标,这样是取到起始位置,在鼠标放开这个方法中我们写上x2,y2坐标,这是直线结束的位置,但是我们要在桌面上进行操作,就要拿到桌面,但是此时桌面在SimpleDraw类里面。我们直接是娶不到的,接下来我们就要找出这两个类的联系,他们的联系就是鼠标事件的创立,我们就要利用上这个联系,把桌面的值传过来,在这边就可以利用影藏类的方法拿到这个桌面。拿过来的桌面直接是不能用的,所有我们要在上面定义一个值,把桌面赋给它就行了;
接着我们就可以来运行了;
这个说名只是画直线的方法,上面的代码也只实现了画椭圆,直线和矩形。色彩还没有实现。