求个JAVA画图程序

求个JAVA画图程序,第1张

//:Pjava

//用法,将所有内容保存到文件 Pjava 编译运行就行了,鼠标点到哪里,矩形就画到哪里!

import javaawt;

import javaawtevent;

import javaxswing;

public class P {

public static void main(String[] args) {

new FrameX()setVisible(true);

}

}

class FrameX extends JFrame implements ActionListener{

private JComboBox mode,color,radius;

private JPanel menu;

private JButton clear,reset;

private CanvasX canvas;

private int x,y;

private static Color[] cs = {Coloryellow,Colorred,Colorblue,Colorgreen,};

public FrameX(){

super("画图哦~~呵呵");

thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

thissetSize(600,400);

thissetLocationRelativeTo(null);

thismode=new JComboBox(new Object[]{"填充","描边",});

thiscolor = new JComboBox(new Object[]{"黄","红","蓝","绿",});

thisradius=new JComboBox(new Object[]{"20","35","50","70","100","150",});

thismenu=new JPanel(null);

thismenusetPreferredSize(new Dimension(1,30));

thisgetContentPane()add(menu,"South");

JLabel l = new JLabel("模式:");

lsetSize(40,23);

lsetLocation(10,0);

thismenuadd(l);

thismodesetBounds(lgetWidth(),0,60,23);

thismenuadd(mode);

thismodeaddActionListener(this);

l = new JLabel("颜色:");

lsetBounds(modegetX()+modegetWidth()+10,0,40,23);

thismenuadd(l);

thiscolorsetBounds(lgetX()+lgetWidth(),0,60,23);

thiscoloraddActionListener(this);

thismenuadd(color);

l = new JLabel("半径:");

lsetBounds(colorgetX()+colorgetWidth()+10,0,40,23);

thismenuadd(l);

thisradiussetBounds(lgetX()+lgetWidth(),0,60,23);

thisradiusaddActionListener(this);

thismenuadd(radius);

thisreset=new JButton("清除");

thisresetsetBounds(radiusgetX()+radiusgetWidth()+20,0,78,23);

thisresetaddActionListener(this);

thismenuadd(reset);

thiscanvas=new CanvasX();

thisgetContentPane()add(canvas,"Center");

thisreset();

}

public void actionPerformed(ActionEvent e) {

Object o = egetSource();

if(oequals(reset))reset();

else thiscanvassetShapeX(makeShapeX());

}

private ShapeX makeShapeX() {

int wh = IntegerparseInt(radiusgetSelectedItem()toString());

Rectangle r = new Rectangle(0,0,wh,wh);

int mod = thismodegetSelectedIndex()+1;

Color c = cs[thiscolorgetSelectedIndex()];

ShapeX s = new ShapeX();

sbc=c;

sfc=c;

smod=mod;

ss=r;

return s;

}

private void reset() {

thiscanvasclear();

thismodesetSelectedIndex(0);

thiscolorsetSelectedIndex(0);

thisradiussetSelectedIndex(0);

thiscanvassetShapeX(makeShapeX());

}

}

class ShapeX{

Shape s;

int mod;

Color fc,bc;

}

class CanvasX extends Canvas implements MouseListener{

public static final int MODE_FILL=1;

public static final int MODE_DRAW=2;

private ShapeX sx;

public CanvasX(){

thisaddMouseListener(this);

}

public void setShapeX(ShapeX x){

thissx=x;

}

public void clear(){

Graphics g = thisgetGraphics();

if(g==null)return;

gsetColor(Colorwhite);

gfillRect(0,0,thisgetWidth(),thisgetHeight());

gdispose();

sx=null;

}

public void process(int x,int y){

if(sx==null)return;

Rectangle r = (Rectangle)sxs;

rsetBounds(x-rwidth/2,y-rheight/2,rwidth,rheight);

Graphics2D g = (Graphics2D)thisgetGraphics();

if(sxmod==MODE_FILL){

gsetColor(sxfc);

gfill(sxs);

}

else if(sxmod==MODE_DRAW){

gsetColor(sxbc);

gdraw(sxs);

}

else if(sxmod==(MODE_FILL|MODE_DRAW)){

gsetColor(sxfc);

gfill(sxs);

gsetColor(sxbc);

gdraw(sxs);

}

gdispose();

}

public void mouseClicked(MouseEvent e) {}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mousePressed(MouseEvent e) {process(egetX(),egetY());}

public void mouseReleased(MouseEvent e) {}

}

import javaapplet;

import javaawt;

import javaawtevent;

public class Tester extends Applet implements ActionListener

{

Button btn1,btn2,btn3,btn4;

public void init(){

setLayout(null);

btn1=new Button("绘制直线");

btn2=new Button("绘制矩形");

btn3=new Button("绘制圆");

add(btn1);

add(btn2);

add(btn3);

btn1setBounds(10, 60, 60, 20);

btn2setBounds(10, 90, 60, 20);

btn3setBounds(10, 120, 60, 20);

btn1addActionListener(this);

btn2addActionListener(this);

btn3addActionListener(this);

validate();

setVisible(true);

}

public void start(){

}

public void actionPerformed(ActionEvent e)

{

Graphics g=thisgetGraphics();

if(egetSource()==btn1)

{

gdrawLine(200, 100, 300, 200);

}

else if(egetSource()==btn2)

{

gdrawRect(200, 250, 200, 200);

}

else

{

gdrawArc(200, 500, 200, 200, 0, 360);

}

}

}

import javaapplet; 

import javaawt; 

import javaawtevent; 

import javautil; 

import javaxswing; 

import javaawtgeom; 

import javaio; 

import javasqlConnection;

class Point implements Serializable 

int x,y; 

Color col; 

int tool; 

int boarder; 

Point(int x, int y, Color col, int tool, int boarder) 

thisx = x; 

thisy = y; 

thiscol = col; 

thistool = tool; 

thisboarder = boarder; 

class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener 

int x = -1, y = -1; 

int con = 1;//画笔大小 

int Econ = 5;//橡皮大小 

int toolFlag = 0;//toolFlag:工具标记 

//toolFlag工具对应表: 

//(0--画笔);(1--橡皮);(2--清除); 

//(3--直线);(4--圆);(5--矩形); 

Color c = new Color(0,0,0); //画笔颜色 

BasicStroke size = new BasicStroke(con,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);//画笔粗细 

Point cutflag = new Point(-1, -1, c, 6, con);//截断标志 

Vector paintInfo = null;//点信息向量组 

int n = 1; 

FileInputStream picIn = null; 

FileOutputStream picOut = null; 

ObjectInputStream VIn = null; 

ObjectOutputStream VOut = null; 

// 工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除/ 

Panel toolPanel; 

Button eraser, drLine,drCircle,drRect; 

Button clear ,pen; 

Choice ColChoice,SizeChoice,EraserChoice; 

Button colchooser; 

Label 颜色,大小B,大小E; 

//保存功能 

Button openPic,savePic; 

FileDialog openPicture,savePicture; 

paintboard(String s) 

super(s); 

addMouseMotionListener(this); 

addMouseListener(this); 

paintInfo = new Vector(); 

/各工具按钮及选择项/ 

//颜色选择 

ColChoice = new Choice(); 

ColChoiceadd("black"); 

ColChoiceadd("red"); 

ColChoiceadd("blue"); 

ColChoiceadd("green"); 

ColChoiceaddItemListener(this); 

//画笔大小选择 

SizeChoice = new Choice(); 

SizeChoiceadd("1"); 

SizeChoiceadd("3"); 

SizeChoiceadd("5"); 

SizeChoiceadd("7"); 

SizeChoiceadd("9"); 

SizeChoiceaddItemListener(this); 

//橡皮大小选择 

EraserChoice = new Choice(); 

EraserChoiceadd("5"); 

EraserChoiceadd("9"); 

EraserChoiceadd("13"); 

EraserChoiceadd("17"); 

EraserChoiceaddItemListener(this); 

//////////////////////////////////////////////////// 

toolPanel = new Panel(); 

clear = new Button("清除"); 

eraser = new Button("橡皮"); 

pen = new Button("画笔"); 

drLine = new Button("画直线"); 

drCircle = new Button("画圆形"); 

drRect = new Button("画矩形"); 

openPic = new Button("打开图画"); 

savePic = new Button("保存图画"); 

colchooser = new Button("显示调色板"); 

//各组件事件监听 

clearaddActionListener(this); 

eraseraddActionListener(this); 

penaddActionListener(this); 

drLineaddActionListener(this); 

drCircleaddActionListener(this); 

drRectaddActionListener(this); 

openPicaddActionListener(this); 

savePicaddActionListener(this); 

colchooseraddActionListener(this); 

颜色 = new Label("画笔颜色",LabelCENTER); 

大小B = new Label("画笔大小",LabelCENTER); 

大小E = new Label("橡皮大小",LabelCENTER); 

//面板添加组件 

toolPaneladd(openPic); 

toolPaneladd(savePic); 

toolPaneladd(pen); 

toolPaneladd(drLine); 

toolPaneladd(drCircle); 

toolPaneladd(drRect); 

toolPaneladd(颜色); toolPaneladd(ColChoice); 

toolPaneladd(大小B); toolPaneladd(SizeChoice); 

toolPaneladd(colchooser); 

toolPaneladd(eraser); 

toolPaneladd(大小E); toolPaneladd(EraserChoice); 

toolPaneladd(clear); 

//工具面板到APPLET面板 

add(toolPanel,BorderLayoutNORTH); 

setBounds(60,60,900,600); setVisible(true); 

validate(); 

//dialog for save and load 

openPicture = new FileDialog(this,"打开图画",FileDialogLOAD); 

openPicturesetVisible(false); 

savePicture = new FileDialog(this,"保存图画",FileDialogSAVE); 

savePicturesetVisible(false); 

openPictureaddWindowListener(new WindowAdapter() 

public void windowClosing(WindowEvent e) 

{ openPicturesetVisible(false); } 

}); 

savePictureaddWindowListener(new WindowAdapter() 

            @Override

public void windowClosing(WindowEvent e) 

{ savePicturesetVisible(false); } 

}); 

addWindowListener(new WindowAdapter() 

public void windowClosing(WindowEvent e) 

{ Systemexit(0);} 

}); 

public void paint(Graphics g) 

Graphics2D g2d = (Graphics2D)g; 

Point p1,p2; 

n = paintInfosize(); 

if(toolFlag==2) 

gclearRect(0,0,getSize()width,getSize()height);//清除 

for(int i=0; i<n ;i++){ 

p1 = (Point)paintInfoelementAt(i); 

p2 = (Point)paintInfoelementAt(i+1); 

size = new BasicStroke(p1boarder,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL); 

g2dsetColor(p1col); 

g2dsetStroke(size); 

if(p1tool==p2tool) 

switch(p1tool) 

case 0://画笔 

Line2D line1 = new Line2DDouble(p1x, p1y, p2x, p2y); 

g2ddraw(line1); 

break; 

case 1://橡皮 

gclearRect(p1x, p1y, p1boarder, p1boarder); 

break; 

case 3://画直线 

Line2D line2 = new Line2DDouble(p1x, p1y, p2x, p2y); 

g2ddraw(line2); 

break; 

case 4://画圆 

Ellipse2D ellipse = new Ellipse2DDouble(p1x, p1y, Mathabs(p2x-p1x) , Mathabs(p2y-p1y)); 

g2ddraw(ellipse); 

break; 

case 5://画矩形 

Rectangle2D rect = new Rectangle2DDouble(p1x, p1y, Mathabs(p2x-p1x) , Mathabs(p2y-p1y)); 

g2ddraw(rect); 

break; 

case 6://截断,跳过 

i=i+1; 

break; 

default : 

}//end switch 

}//end if 

}//end for 

public void itemStateChanged(ItemEvent e) 

if(egetSource()==ColChoice)//预选颜色 

String name = ColChoicegetSelectedItem(); 

            switch (name) {

                case "black":

                    c = new Color(0,0,0);

                    break;

                case "red":

                    c = new Color(255,0,0);

                    break;

                case "green":

                    c = new Color(0,255,0);

                    break;

                case "blue":

                    c = new Color(0,0,255);

                    break;

            }

else if(egetSource()==SizeChoice)//画笔大小 

String selected = SizeChoicegetSelectedItem(); 

            switch (selected) {

                case "1":

                    con = 1;

                    size = new BasicStroke(con,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);

                    break;

                case "3":

                    con = 3;

                    size = new BasicStroke(con,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);

                    break;

                case "5":

                    con = 5;

                    size = new BasicStroke(con,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);

                    break;

                case "7":

                    con = 7;

                    size = new BasicStroke(con,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);

                    break;

                case "9":

                    con = 9;

                    size = new BasicStroke(con,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);

                    break;

            }

else if(egetSource()==EraserChoice)//橡皮大小 

String Esize = EraserChoicegetSelectedItem(); 

if(Esize=="5") 

{ Econ = 52; } 

else if(Esize=="9") 

{ Econ = 92; } 

else if(Esize=="13") 

{ Econ = 132; } 

else if(Esize=="17") 

{ Econ = 173; } 

public void mouseDragged(MouseEvent e) 

Point p1 ; 

switch(toolFlag){ 

case 0://画笔 

x = (int)egetX(); 

y = (int)egetY(); 

p1 = new Point(x, y, c, toolFlag, con); 

paintInfoaddElement(p1); 

repaint(); 

break; 

case 1://橡皮 

x = (int)egetX(); 

y = (int)egetY(); 

p1 = new Point(x, y, null, toolFlag, Econ); 

paintInfoaddElement(p1); 

repaint(); 

break; 

default : 

public void mouseMoved(MouseEvent e) {} 

public void update(Graphics g) 

paint(g); 

public void mousePressed(MouseEvent e) 

Point p2; 

switch(toolFlag){ 

case 3://直线 

x = (int)egetX(); 

y = (int)egetY(); 

p2 = new Point(x, y, c, toolFlag, con); 

paintInfoaddElement(p2); 

break; 

case 4: //圆 

x = (int)egetX(); 

y = (int)egetY(); 

p2 = new Point(x, y, c, toolFlag, con); 

paintInfoaddElement(p2); 

break; 

case 5: //矩形 

x = (int)egetX(); 

y = (int)egetY(); 

p2 = new Point(x, y, c, toolFlag, con); 

paintInfoaddElement(p2); 

break; 

default : 

public void mouseReleased(MouseEvent e) 

Point p3; 

switch(toolFlag){ 

case 0://画笔 

paintInfoaddElement(cutflag); 

break; 

case 1: //eraser 

paintInfoaddElement(cutflag); 

break; 

case 3://直线 

x = (int)egetX(); 

y = (int)egetY(); 

p3 = new Point(x, y, c, toolFlag, con); 

paintInfoaddElement(p3); 

paintInfoaddElement(cutflag); 

repaint(); 

break; 

case 4: //圆 

x = (int)egetX(); 

y = (int)egetY(); 

p3 = new Point(x, y, c, toolFlag, con); 

paintInfoaddElement(p3); 

paintInfoaddElement(cutflag); 

repaint(); 

break; 

case 5: //矩形 

x = (int)egetX(); 

y = (int)egetY(); 

p3 = new Point(x, y, c, toolFlag, con); 

paintInfoaddElement(p3); 

paintInfoaddElement(cutflag); 

repaint(); 

break; 

default: 

public void mouseEntered(MouseEvent e){} 

public void mouseExited(MouseEvent e){} 

public void mouseClicked(MouseEvent e){} 

public void actionPerformed(ActionEvent e) 

if(egetSource()==pen)//画笔 

{toolFlag = 0;} 

if(egetSource()==eraser)//橡皮 

{toolFlag = 1;} 

if(egetSource()==clear)//清除 

toolFlag = 2; 

paintInforemoveAllElements(); 

repaint(); 

if(egetSource()==drLine)//画线 

{toolFlag = 3;} 

if(egetSource()==drCircle)//画圆 

{toolFlag = 4;} 

if(egetSource()==drRect)//画矩形 

{toolFlag = 5;} 

if(egetSource()==colchooser)//调色板 

Color newColor = JColorChoosershowDialog(this,"调色板",c); 

c = newColor; 

if(egetSource()==openPic)//打开图画 

openPicturesetVisible(true); 

if(openPicturegetFile()!=null) 

int tempflag; 

tempflag = toolFlag; 

toolFlag = 2 ; 

repaint(); 

try{ 

paintInforemoveAllElements(); 

File filein = new File(openPicturegetDirectory(),openPicturegetFile()); 

picIn = new FileInputStream(filein); 

VIn = new ObjectInputStream(picIn); 

paintInfo = (Vector)VInreadObject(); 

VInclose(); 

repaint(); 

toolFlag = tempflag; 

catch(ClassNotFoundException IOe2) 

repaint(); 

toolFlag = tempflag; 

Systemoutprintln("can not read object"); 

catch(IOException IOe) 

repaint(); 

toolFlag = tempflag; 

Systemoutprintln("can not read file"); 

if(egetSource()==savePic)//保存图画 

savePicturesetVisible(true); 

try{ 

File fileout = new File(savePicturegetDirectory(),savePicturegetFile()); 

picOut = new FileOutputStream(fileout); 

VOut = new ObjectOutputStream(picOut); 

VOutwriteObject(paintInfo); 

VOutclose(); 

catch(IOException IOe) 

Systemoutprintln("can not write object"); 

}//end paintboard 

public class Pb 

public static void main(String args[]) 

{ new paintboard("画图程序"); } 

}

只有矩形有圆形能移动,其它实现起来麻烦点,办法有的只是代码太多。

画圆弧改成了画曲线,圆弧稍麻烦,当然方法是很简单的,你可以自己思考一下。

双击13个颜色中的任意一个都会d出颜色选择器。

有保存与打开功能。扩展名请用 jdr

基本满足条件,细节可能不是很好,另,代码比较乱,怕不好看懂咯,呼呼。

import javaawt;

import javaawtevent;

import javaawtgeom;

import javaawtimageBufferedImage;

import javaio;

import javautilArrayList;

import javaxswing;

import javaxswingfilechooserFileNameExtensionFilter;

public class JDraw {

public static void main(String[] args) {

JFrame f=new JFrame();

fsetDefaultCloseOperation(3);

fsetSize(880,600);

fsetLocationRelativeTo(null);

fgetContentPane()add(Mc);

fgetContentPane()add(Mm,"South");

fsetVisible(true);

}

}

class CVS extends Component implements ComponentListener,MouseListener,MouseMotionListener{

public void componentHidden(ComponentEvent e) {}

public void componentMoved(ComponentEvent e) {}

public void componentResized(ComponentEvent e) {resized();}

public void componentShown(ComponentEvent e) {}

private void resized() {

int w=thisgetWidth();

int h=thisgetHeight();

tbuff=new BufferedImage(w,h,3);

makeBuff(w,h);

}

private void makeBuff(int w,int h) {

Graphics g = tbuffgetGraphics();

gdrawImage(buff,0,0,null);

gdispose();

buff=new BufferedImage(w,h,3);

g=buffgetGraphics();

gdrawImage(tbuff,0,0,null);

gdispose();

}

BufferedImage buff,tbuff;

CVS(){

thisaddComponentListener(this);

thisaddMouseListener(this);

thisaddMouseMotionListener(this);

buff=new BufferedImage(1,1,3);

}

public void paint(Graphics gr){

Graphics2D g = buffcreateGraphics();

gsetBackground(new Color(0xff000000,true));

gclearRect(0,0,getWidth(),getHeight());

gsetRenderingHint(RenderingHintsKEY_ANTIALIASING,

RenderingHintsVALUE_ANTIALIAS_ON);

MsadrawAll(g);

if(Mts!=null)

Mtsdraw(g);

gdispose();

grdrawImage(buff,0,0,this);

grdispose();

}

public void mouseClicked(MouseEvent e) {}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mousePressed(MouseEvent e) {

Mmp(egetPoint());

}

public void mouseReleased(MouseEvent e) {

Mmr(egetPoint());

}

public void mouseDragged(MouseEvent e) {

Mmd(egetPoint());

}

public void mouseMoved(MouseEvent e) {}

}

class Menu extends JComponent implements MouseListener,ActionListener{

JComboBox sbox,method;

CLabel[] cl;

JCheckBox fillC,drawB;

JRadioButton fc,bc;

ButtonGroup bg;

JButton clear,up,down,save,load;

Menu(){

thissetLayout(new FlowLayout());

method=new JComboBox(new Object[]{"draw","move","erase",});

add(method);

sbox=new JComboBox(new Object[]{"Pt","Ln","Rect","Cir","Arc",});

add(sbox);

cl=new CLabel[13];

for(int i=0; i<cllength; i++){

cl[i]=new CLabel();

cl[i]addMouseListener(this);

add(cl[i]);

}

fc=new JRadioButton("fc",true);

bc=new JRadioButton("bc");

bg=new ButtonGroup();

bgadd(fc);bgadd(bc);

add(fc);add(bc);

fcsetOpaque(true);

bcsetOpaque(true);

fcsetBackground(Colorwhite);

bcsetBackground(Colorblue);

fillC=new JCheckBox("Fill",true);

drawB=new JCheckBox("Draw",true);

fillCaddActionListener(this);

drawBaddActionListener(this);

add(fillC);add(drawB);

clear=new JButton("clear");

clearaddActionListener(this);

add(clear);

up=new JButton("zUp");

upaddActionListener(this);

add(up);

down=new JButton("zDown");

downaddActionListener(this);

add(down);

save=new JButton("Save");

saveaddActionListener(this);

add(save);

load=new JButton("Load");

loadaddActionListener(this);

add(load);

}

public void mouseClicked(MouseEvent e) {

JLabel l=(JLabel)egetSource();

if(egetClickCount()==2){

Color sc=JColorChoosershowDialog(null, "Color chooser", lgetBackground());

lsetBackground(sc);

mousePressed(e);

}

}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mousePressed(MouseEvent e) {

Color c=((JLabel)egetSource())getBackground();

if(fcisSelected())

fcsetBackground(c);

else if(bcisSelected())

bcsetBackground(c);

Mcp();

}

public void mouseReleased(MouseEvent e) {}

public void actionPerformed(ActionEvent e) {

if(egetSource()==clear)Mclear();

else if(egetSource()==up)Mup();

else if(egetSource()==down)Mdown();

else if(egetSource()==save)Msave();

else if(egetSource()==load)Mload();

else if(egetSource()==fillC||egetSource()==drawB)Mcp();

}

}

class CLabel extends JLabel{

static Color[] cs={Colorred,Colororange,Coloryellow,Colorgreen,Colorcyan,

Colorblue,Colormagenta,Colormagentabrighter(),

Colorwhite,Colorblack,Colorgray,ColorLIGHT_GRAY,ColorDARK_GRAY,};

static int i;

CLabel(){

thissetOpaque(true);

thissetBackground(cs[i++]);

thissetBorder(BorderFactorycreateLineBorder(Colorblack));

thissetPreferredSize(new Dimension(10,20));

}

}

class M{

static JFileChooser jfc=new JFileChooser();

static Menu m=new Menu();

static CVS c=new CVS();

static SA sa=new SA();

static S ts=null,selected=null;

static Color fc,bc;

static void clear(){

sassclear();

crepaint();

}

public static void cp() {

Systemoutprintln(selected);

if(selected!=null){

selectedfillColor=mfcgetBackground();

selectedborderColor=mbcgetBackground();

selectedfc=mfillCisSelected();

selecteddb=mdrawBisSelected();

crepaint();

}

}

public static void up() {

if(selected!=null){

saupZ(selected);

crepaint();

}

}

public static void down(){

if(selected!=null){

sadownZ(selected);

crepaint();

}

}

static{

jfcsetFileFilter(new FileNameExtensionFilter("JDraw file (jdraw,jdr)","jdr","jdraw"));

}

static void save(){

int x=jfcshowSaveDialog(c);

if(x==JFileChooserAPPROVE_OPTION){

File f = jfcgetSelectedFile();

try{

ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(f));

ooswriteObject(sa);

oosflush();

oosclose();

}catch(Exception e){}

}

}

static void load(){

int x=jfcshowOpenDialog(c);

if(x==JFileChooserAPPROVE_OPTION){

File f = jfcgetSelectedFile();

try{

ObjectInputStream oos=new ObjectInputStream(new FileInputStream(f));

Object r=oosreadObject();

if(r!=null){

sa=(SA)r;

crepaint();

}

oosclose();

}catch(Exception e){eprintStackTrace();}

}

}

static int mx,my,tx,ty,ox,oy;

static int pc=0,pmax;

static int sm;

static boolean ne=true;

static int mid;

static void mp(Point p){

mid=mmethodgetSelectedIndex();

if(mid==0){

if(ne){

mx=px;my=py;

pc=0;

sm=msboxgetSelectedIndex();

pmax=sm==42:1;

ne=false;

}

++pc;

}

else if(mid==1){

checkSel(p);

mx=px;my=py;

}

else if(mid==2){

checkSel(p);

if(selected!=null){

sassremove(selected);

crepaint();

}

}

}

private static void checkSel(Point p) {

selected=null;

for(int i=sasssize();i>0; i--)

if(sassget(i-1)shapecontains(p)){

selected=sassget(i-1);break;

}

saselect(selected);

crepaint();

}

static void mt(){

Shape s=null;

int cx,cy,cw,ch;

switch(sm){

case 0:

case 2:

cx=Mathmin(mx,tx);

cy=Mathmin(my,ty);

cw=Mathabs(mx-tx);

ch=Mathabs(my-ty);

if(sm==0)

s=new Ellipse2DDouble(cx,cy,cw,ch);

else

s=new Rectangle(cx,cy,cw,ch);

break;

case 1:

s=new Line2DFloat(mx,my,tx,ty);

break;

case 3:

cw=Mathabs(mx-tx);

ch=Mathabs(my-ty);

int cd=(int)Mathsqrt(Mathpow(mx-tx,2)+Mathpow(my-ty,2))2;

cx=mx-cd/2;

cy=my-cd/2;

s=new Ellipse2DDouble(cx,cy,cd,cd);

break;

case 4:

Path2D p=new Path2DDouble();

pmoveTo(mx,my);

if(pc==1){

plineTo(tx, ty);

}

else{

pquadTo(ox,oy,tx,ty);

}

s=p;

break;

}

ts=new S(s,mfcgetBackground(),mbcgetBackground(),mfillCisSelected(),mdrawBisSelected(),null);

crepaint();

}

static void md(Point p){

if(mid==0){

if(!sassisEmpty()){

sassget(sasssize()-1)sel=false;

}

if(pc>1){

ox=px;oy=py;

}

else{

tx=px;ty=py;

}

mt();

}

else if(mid==1){

if(selected!=null){

moveTo(selected,p);

crepaint();

}

}

else if(mid==2){

checkSel(p);

if(selected!=null){

sassremove(selected);

crepaint();

}

}

}

static void moveTo(S s, Point p) {

if(sshape instanceof Rectangle){

Rectangle r=(Rectangle)sshape;

rsetLocation(rx+px-mx,ry+py-my);

mx=px;my=py;

}

else if(sshape instanceof Ellipse2D){

Ellipse2D e=(Ellipse2D)sshape;

esetFrame(egetX()+px-mx,egetY()+py-my,egetWidth(),egetHeight());

mx=px;my=py;

}

}

static void mr(Point p) {

if(pc==pmax){

pc=0;

ne=true;

saadd(ts);

selected=ts;

ts=null;

}

}

}

class S implements Serializable{

boolean fc,db,sel=true;

Shape shape;

Color fillColor,borderColor;

Stroke stroke;

static Stroke bstroke=new MyBasicStroke();

static Stroke selectStroke=new BasicStroke(1,BasicStrokeCAP_BUTT,BasicStrokeJOIN_MITER,1,new float[]{5,2},1);

S(Shape s,Color c,Color b,boolean f,boolean d,Stroke k){

thisshape=s;thisfillColor=c;thisborderColor=b;thisfc=f;thisdb=d;thisstroke=k==nullbstroke:k;

}

void draw(Graphics2D g){

if(fc){

gsetColor(fillColor);

gfill(shape);

}

if(db){

gsetColor(borderColor);

gsetStroke(stroke);

gdraw(shape);

}

if(sel){

gsetColor(Colorgreen);

gsetStroke(selectStroke);

gdraw(shapegetBounds());

}

}

}

class MyBasicStroke extends BasicStroke implements Serializable{}

class SA implements Serializable{

ArrayList<S> ss=new ArrayList<S>();

void add(S s){

if(s!=null){

for(S sx:ss)

sxsel=false;

ssadd(s);

}

}

S remove(int i){

return ssremove(i);

}

void remove(S s){

ssremove(s);

}

void upZ(S s){

indexZ(s,1);

}

void downZ(S s){

indexZ(s,-1);

}

void indexZ(S s, int i) {

int si=ssindexOf(s);

if(si+i<0||si+i>sssize()-1)return;

swap(s,ssget(si+i));

}

void swap(S a,S b){

int ai=ssindexOf(a);

int bi=ssindexOf(b);

ssset(ai,b);

ssset(bi,a);

}

void select(S s){

for(S x:ss)

xsel=false;

if(s!=null)

ssel=true;

}

void drawAll(Graphics2D g){

for(S s:ss)

sdraw(g);

}

}

以上就是关于求个JAVA画图程序全部的内容,包括:求个JAVA画图程序、编写一个绘图java 小程序,用户点击某一按钮后,程序绘制相应的图形(如点击"画圆",则绘制圆形);、JAVA画图板程序,用netbeans做,要求画圆,椭圆,直线,三角形,矩形,可以填充颜色和擦除等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10633094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存