一、创立画图板主界面
import javax.swing.*;
import java.awt.*;
import java.util.concurrent.Flow;
public class drawPad {
public void showUI() {
JFrame jf = new JFrame();//创立界面
jf.setTitle("画图板");//给界面标题
jf.setSize(800, 800);//设置大小
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭方式
jf.setVisible(true);//可视化操作
FlowLayout flow=new FlowLayout();
jf.setLayout(flow);//流式布局管理
JButton btnLine=new JButton("直线");
JButton btnRect=new JButton("矩形");
JButton btnOval=new JButton("圆形");
JButton btnIT=new JButton("等腰三角形");
JButton btnTri=new JButton("三角形");
JButton btnPolygon=new JButton("多边形");
//创建各类想要画出的图形的按钮
jf.add(btnLine);
jf.add(btnRect);
jf.add(btnOval);
jf.add(btnIT);
jf.add(btnTri);
jf.add(btnPolygon);
//将按钮加到界面中
jf.setVisible(true);
drawline drawl = new drawline();//为drawline类创建一个对象
jf.addMouseListener(drawl);
btnLine.addActionListener(drawl);
btnRect.addActionListener(drawl);
btnOval.addActionListener(drawl);
btnIT.addActionListener(drawl);
btnTri.addActionListener(drawl);
btnPolygon.addActionListener(drawl);
//将所有按钮添加drawl的动作监听器功能
Graphics g1=jf.getGraphics();//在此类中创立一个图像以显示
drawl.g2=g1;//将在drawline中形成的图像给到g1
System.out.println(g1);
}
public static void main(String[]args){
drawPad drawpad=new drawPad();
drawpad.showUI();
}
}
二、实现各类图形的显示
package com.drawline;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
//创建draw类并为其赋予鼠标监听器和动作监听器的功能
public class drawline implements MouseListener,ActionListener {
Graphics g2;
int x1,y1,x2,y2;
String shapeType="直线";//初始化获取的文本
@Override
public void actionPerformed(ActionEvent e) {
String btnStr=e.getActionCommand();
shapeType=btnStr;
}//获取用户所点击按钮上的文字
int x3,y3,x4,y4,x5,y5;
int count=0;
@Override
//鼠标监听器
public void mouseClicked(MouseEvent e) {
int x = e.getX ();
int y = e.getY ();
//获取鼠标点击处的位置坐标
if(shapeType.equals ("三角形")){
g2.fillOval (x -2, y -2, 5, 5);//显示一个实心小圆点当作三角形顶点
if(count == 0){
x3 = x;
y3 = y;
count++;
}//第一个点
else if(count == 1){
x4 = x;
y4 = y;
g2.drawLine (x3, y3, x4, y4);
count++;
}//第二个点
else if(count == 2){
x5 = x;
y5 = y;
g2.drawLine (x3, y3, x5, y5);
g2.drawLine (x5, y5, x4, y4);
count = 0;
}
} else if(shapeType.equals ("多边形")){
g2.fillOval (x - 2, y - 2, 5, 5);
if(count == 0){
x3 = x;
y3 = y;
count++;
} else if(count == 1){
x4 = x;
y4 = y;
g2.drawLine (x3, y3, x4, y4);
count++;
} else if(count == 2){
x5 = x;
y5 = y;
g2.drawLine (x5, y5, x4, y4);
x4 = x5;
y4 = y5;
count = 2;
if(e.getButton () == 3){// 鼠标右键点击
g2.drawLine (x3, y3, x5, y5);
count = 0;
}
}
}
}
//三角形和多边形的实现方式时依靠鼠标点击成点,连点为线。
@Override
public void mousePressed(MouseEvent e) {
int x=e.getX();
int y=e.getY();
x1=x;
y1=y;
}
@Override
public void mouseReleased(MouseEvent e) {
int x=e.getX();
int y=e.getY();
x2=x;
y2=y;
if(shapeType.equals ("直线")){
g2.drawLine (x1, y1, x2, y2);
} else if(shapeType.equals ("矩形")){
// 矩形左上角的坐标 宽度 高度
g2.drawRect (x1, y1, x2 - x1, y2 - y1);
} else if(shapeType.equals ("圆形")){
// 圆的外切矩形左上角的坐标 宽度 高度
g2.drawOval (x1, y1, x2 - x1, y2 - y1);
} else if(shapeType.equals ("等腰三角形")){
int xt = (x1 + x2) / 2;
int yt = y1;
g2.drawLine (xt, yt, x1, y2);
g2.drawLine (xt, yt, x2, y2);
g2.drawLine (x2, y2, x1, y2);
}
}
//直线、矩形、圆形、等腰三角形的实现依靠鼠标的按压和拖拽
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}