java实现画图,可更换图形的各种形状,颜色,可擦除
Shape.java 封装图形的左右坐标,标志量,颜色
package huatu;
import java.awt.Color;
public class shape {
int leftx,lefty,rightx,righty,flag;
Color color;
shape(int leftx,int lefty,int rightx,int righty,int flag,Color color){
this.leftx=leftx;
this.lefty=lefty;
this.rightx=rightx;
this.righty=righty;
this.flag=flag;
this.color=color;
}
void setColor(Color color){
this.color=color;
}
Color getColor(){
return color;
}
int getLeftx(){
return leftx;
}
void setLeftx(int leftx){
this.leftx=leftx;
}
int getLefty(){
return lefty;
}
void setLefty(int lefty){
this.lefty=lefty;
}
int getRightx(){
return rightx;
}
void setRightx(int rightx){
this.rightx=rightx;
}
int getRighty(){
return righty;
}
void setRighty(int righty){
this.righty=righty;
}
int getFlag(){
return flag;
}
void setFlag(int flag){
this.flag=flag;
}
}
My.java 面板继承画布Canvas,根据标志量的不同可画不同的图形,可修改颜色
package huatu;
import java.awt.*;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.*;
public class my extends Canvas implements MouseListener,MouseMotionListener{
ArrayList<shape> list=new ArrayList<shape>();
int leftx,lefty,rightx,righty;
Color color=Color.black;
int f=0;
int ff=0;
my(){
addMouseListener(this);
addMouseMotionListener(this);
}
public void paint(Graphics g){
int newX = Math.min(leftx,rightx);
int newY = Math.min(lefty,righty);
int newWidth = Math.abs(leftx-rightx);
int newHeight = Math.abs(lefty-righty);
if(ff==1){
Iterator<shape> iterator=list.iterator();
while(iterator.hasNext()){
shape p=(shape)iterator.next();
int newX1 = Math.min(p.leftx,p.rightx);
int newY1 = Math.min(p.lefty,p.righty);
int newWidth1 = Math.abs(p.leftx-p.rightx);
int newHeight1 = Math.abs(p.lefty-p.righty);
if((p.color).equals(Color.red)){
g.setColor(color.red);
}
if((p.color).equals(Color.green)){
g.setColor(color.green);
}
if((p.color).equals(Color.blue)){
g.setColor(color.blue);
}
if((p.color).equals(Color.yellow)){
g.setColor(color.yellow);
}
if((p.color).equals(Color.black)){
g.setColor(color.black);
}
if(p.flag==0){
g.drawLine(p.leftx, p.lefty, p.rightx, p.righty);
}
if(p.flag==1){
g.drawRect(newX1, newY1, newWidth1, newHeight1);
}
if(p.flag==2){
g.drawOval(newX1, newY1, newWidth1, newHeight1);
}
if(p.flag==3){
g.fillRect(newX1, newY1, newWidth1, newHeight1);
}
if(p.flag==4){
g.fillOval(newX1, newY1, newWidth1, newHeight1);
}
if(p.flag==5){
g.clearRect(newX1, newY1, newWidth1, newHeight1);
}
}
}
if((color).equals(Color.red)){
g.setColor(color.red);
}
if((color).equals(Color.green)){
g.setColor(color.green);
}
if((color).equals(Color.blue)){
g.setColor(color.blue);
}
if((color).equals(Color.yellow)){
g.setColor(color.yellow);
}
if((color).equals(Color.black)){
g.setColor(color.black);
}
if(f==0){
g.drawLine(leftx, lefty,rightx,righty);
}
if(f==1){
g.drawRect(newX, newY, newWidth, newHeight);
}
if(f==2){
g.drawOval(newX, newY, newWidth, newHeight);
}
if(f==3){
g.fillRect(newX, newY, newWidth, newHeight);
}
if(f==4){
g.fillOval(newX, newY, newWidth, newHeight);
}
if(f==5){
g.clearRect(newX, newY, newWidth, newHeight);
}
}
public void mousePressed(MouseEvent e){
leftx=e.getX();
lefty=e.getY();
// repaint();
ff=1;
}
public void mouseReleased(MouseEvent e) {//写
list.add(new shape(leftx,lefty,rightx,righty,f,color));
ff=0;
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseDragged(MouseEvent e){
rightx=e.getX();
righty=e.getY();
repaint();
} //负责处理拖动鼠标触发的鼠标事件。
public void mouseMoved(MouseEvent e) {}
}
界面
Win.java 根据菜单项中的选项,更改图形形状,颜色,擦出
package huatu;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.util.Calendar.*;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class win extends JFrame implements ActionListener
{
JMenuBar jmb = new JMenuBar();
JMenu jm = new JMenu("文件(F)");
JMenuItem jmi1 = new JMenuItem("打开");
JMenuItem jmi2 = new JMenuItem("保存");
JMenu menu1=new JMenu("形状(S)");
JMenuItem item11=new JMenuItem("直线");
JMenuItem item12=new JMenuItem("矩形");
JMenuItem item13=new JMenuItem("圆形");
JMenu menu2=new JMenu("颜色(C)");
JMenuItem item21=new JMenuItem("红色");
JMenuItem item22=new JMenuItem("绿色");
JMenuItem item23=new JMenuItem("蓝色");
JMenuItem item24=new JMenuItem("黄色");
JMenuItem item25=new JMenuItem("黑色");
JMenu menu3=new JMenu("实心形状(M)");
JMenuItem item31=new JMenuItem("实心矩形");
JMenuItem item32=new JMenuItem("实心圆");
JMenu menu4=new JMenu("工具(T)");
JMenuItem item41=new JMenuItem("橡皮檫");
JButton button1=new JButton("长方形");
JButton button2=new JButton("椭圆");
my pane=new my();
// JFileChooser fileDialog=new JFileChooser();
JFileChooser fileDialog=new JFileChooser();
BufferedReader in;
FileReader fileReader;
BufferedWriter out;
FileWriter fileWriter;
File dir;
String name;
win()
{
init();
setTitle("画图");
setBounds(100,100,500,300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init(){
add(pane,BorderLayout.CENTER);
jm.add(jmi1);
jm.add(jmi2);
jmb.add(jm);
menu1.add(item11);
menu1.add(item12);
menu1.add(item13);
menu2.add(item21);
menu2.add(item22);
menu2.add(item23);
menu2.add(item24);
menu2.add(item25);
menu3.add(item31);
menu3.add(item32);
menu4.add(item41);
jmb.add(menu1);
jmb.add(menu2);
jmb.add(menu3);
jmb.add(menu4);
setJMenuBar(jmb);
jmi1.addActionListener(this);
jmi2.addActionListener(this);
item11.addActionListener(this);
item12.addActionListener(this);
item13.addActionListener(this);
item21.addActionListener(this);
item22.addActionListener(this);
item23.addActionListener(this);
item24.addActionListener(this);
item25.addActionListener(this);
item31.addActionListener(this);
item32.addActionListener(this);
item41.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if (e.getSource()== item11){
pane.f=0;
}
if (e.getSource()== item12){
pane.f=1;
}
if (e.getSource()== item13){
pane.f=2;
}
if (e.getSource()== item31){
pane.f=3;
}
if (e.getSource()== item32){
pane.f=4;
}
if (e.getSource()== item21){
pane.color=Color.red;
}
if (e.getSource()== item22){
pane.color = Color.green;
}
if (e.getSource()== item23){
pane.color = Color.blue;
}
if (e.getSource()== item24){
pane.color = Color.yellow;
}
if (e.getSource()== item25){
pane.color = Color.black;
}
if (e.getSource()== item41){
// pane.color = Color.black;
pane.f=5;
}
if(e.getSource()==jmi1){}
if(e.getSource()==jmi2){}
}
}
主函数:
package huatu;
public class test3 {
public static void main(String args[]){
new win();
}
}