不知道大家看了Java6后有没有做出来一个简单的登录界面,今天我们要做的是一个简单的画图板,在上面实现画不同图形的功能。我们可以先打开自己电脑的画图板
可以看到画图板是一个界面,上面图形按钮,点击不同的图形按钮可以画不同的图形,有颜色按钮,点击不同颜色的按钮就可以画出不同颜色的图形;有一块画布,可以在上面进行画图操作……
因此,一个功能简单的画图板,其实实现起来很复杂,需要用到事件监听、界面开发等内容。实现一个画图程序一般需要很多类:
JFrame窗体容器类
JButton按钮元素组件类
FlowLayout流式布局类
Graphics画笔类:提供各种绘制图形的方法
Color颜色类:提供颜色
ActionListener动作事件接口,将监听到的内容交给他处理
MouseListener鼠标事件接口:提供处理鼠标按下,释放,点击,进入和离开动作的处理方法
MouseMotionListener鼠标移动事件接口:提供处理鼠标移动和拖动动作的处理方法
……………………
下图是一个较简单的画图板,我们只需实现画一部分图形的功能即可
我们需要创建2个类:画板类(DrawPanel1)和监听类(DrawListener1)。在画板类中我们用开发界面的方法创建一个具有不同按钮的窗体,然后给按钮和窗体添加监听器,再调用窗体的画笔,使之能在窗体上画图;在监听其上我们通过监听点击不同的按钮,使用画笔Graphics中提供画图形的方法来画出不同形状或颜色的图形。
首先定义DrawPanel1类:
public class DrawPanel1{
//定义一个显示界面的方法
public void showUI(){
//创建一个窗体
JFrame drawFrame = new JFrame();
//设置窗体的 大小、位置、标题
drawFrame.setSize(1500, 1000);
drawFrame.setLocationRelativeTo(null);
drawFrame.setTitle("画图板V1.0");
//设置一个数组,显示直线,椭圆等
String a[] = {"直线","椭圆"};
for(int i = 0;i
//创建多个按钮对象,设置宽和高
javax.swing.JButton jbu = new javax.swing.JButton(a[i]);
java.awt.Dimension d1 = new java.awt.Dimension(100,30);
jbu.setPreferredSize(d1);
//按钮加到窗体上
drawFrame.add(jbu);
//给按钮添加监听
jbu.addActionListener(drawL);
//给窗体添加监听器
drawFrame.addMouseListener(drawL);
//设置窗体可见
drawFrame.setVisible(true);
//获取窗体的画笔
Graphics g = drawFrame.getGraphics();
//调用监听器设置画笔的方法
drawL.setG(g);
}
//定义主方法
public static void main(String[] args){
//创建DrawPanel1类的对象,调用showUI()方法
DrawPanel1 drawPanel = new DrawPanel1();
drawPanel.showUI();
}
}
定义监听类DrawListener1:
public class DrawListener1 implements MouseListener,ActionListener{
private int x1,x2,y1,y2;
private Graphics g;
private String type;
private Color color;
//设置画笔的方法
public void setG(Graphics argG){
g = argG;
}
//重写ActionListener中的抽象方法,点击按钮的时候调用
public void actionPerformed(ActionEvent e){
JButton button = (JButton) e.getSource();// 获取事件源对象
String text = button.getText();
if(text.equals(null) || text.equals("")){
color = button.getBackground();
System.out.println("color = " + color);
g.setColor(color);
}
else {
type = button.getText();// 获取按钮上的文字信息
System.out.println("text = " + text);
}
}
//重写MouseListener中的抽象方法
public void mouseClicked(MouseEvent e){
System.out.println("鼠标点击");
}
public void mousePressed(MouseEvent e){
System.out.println("鼠标按下");
//记录鼠标按下的位置
x1 = e.getX();
y1 = e.getY();
}
public void mouseReleased(MouseEvent e){
System.out.println("鼠标松开");
//记录鼠标松开的位置
x2 = e.getX();
y2 = e.getY();
//调用画笔对象,点击不同的按钮绘制不同的图形
if("直线".equals(type)){
//画直线
g.drawLine(x1, y1, x2, y2);
}
else
if("椭圆".equals(type)){
g.drawOval(Math.min(x1, x2),Math.min(y1, y2), Math.abs(x1 - x2), Math.abs(y1 - y2));
}
public void mouseEntered(MouseEvent e){
System.out.println("鼠标进入");
}
public void mouseExited(MouseEvent e){
System.out.println("鼠标离开");
}
}
MouseListener接口中有5个抽象方法 public void mouseClicked(MouseEvent e); public void mousePressed(MouseEvent e); public void mouseReleased(MouseEvent e); public void mouseEntered(MouseEvent e); public void mouseExited(MouseEvent e);
DrawListener1实现了这个接口,所以必须重写接口内的所有抽象方法。
在发生鼠标按下这个操作的时候,监听器记录下鼠标发生按下操作时的坐标(x1,y1),在发生鼠标松开这个操作的时候,监听器记录下鼠标发生松开操作时的坐标(x2,y2)。然后通过画笔g调用Graphic类中画直线(drawLine)和画椭圆(drawOval)的方法,将对应的参数传过去,就可以画直线和椭圆了。
我们还可以用画图板画更复杂的图形(比如任意多边形,立体矩形等),画这些图形的方法Graphics类中并没有提供,这就需要我们开动脑筋,尽量利用Graphics类中的某些方法来解决了。读者可以先百度一下用Graphics类画图的方法,小编也会在以后的博客中详细介绍,所以,
关注小编不吃亏!