JAVA GUI程序,鼠标点三下画出一个三角形,求思路或源码

JAVA GUI程序,鼠标点三下画出一个三角形,求思路或源码,第1张

每次按下鼠标,就把鼠标所在处的坐标保存下来;

然后判断这是第几次按下了,

如果是第三次,那么从记录中取出第一个点,

和第二个点分别作为起点和终点画线,

再和第三个点重复一次,

然后取出第二个点,

和第三个点分别作为起点和终点画线;

三条线画出来后,三角形也就出来了。

按照你的要求画出来的随着鼠标的移动而移动的Java程序如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

import javaawtGraphics;

import javaawteventMouseEvent;

import javaawteventMouseMotionListener;

import javaxswingImageIcon;

import javaxswingJFrame;

public class FFF extends JFrame implements MouseMotionListener{

ImageIcon ii=new ImageIcon("femalepng");

int x,y;

FFF(){

setTitle("Mouse Move");

addMouseMotionListener(this);

setSize(400,400);

setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

setLocationRelativeTo(null);

setVisible(true);

}

public void paint(Graphics g){

superpaint(g);

gdrawImage(iigetImage(), x, y, null);

}

@Override

public void mouseDragged(MouseEvent e) {}

@Override

public void mouseMoved(MouseEvent e) {

x=egetX();

y=egetY();

repaint();

}

public static void main(String[] args) {

new FFF();

}

}

运行结果

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("画图程序"); } 

}

以上就是关于JAVA GUI程序,鼠标点三下画出一个三角形,求思路或源码全部的内容,包括:JAVA GUI程序,鼠标点三下画出一个三角形,求思路或源码、java中怎么让图片随鼠标移动、JAVA画图板程序,用netbeans做,要求画圆,椭圆,直线,三角形,矩形,可以填充颜色和擦除等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存