用Java怎么在画板上给三角形填色,怎么画连续的不规则的曲线

用Java怎么在画板上给三角形填色,怎么画连续的不规则的曲线,第1张

package bdzhidao;import javaawt;import javaxswing;import javaawtevent;public class DrawingBoard extends JFrame{ int[] xPoint={200,300,500}; int[] yPoint={100,180,240}; static int m=15; static Color color=new Color(255,0,0); private JComboBox jcb2=new JComboBox(new Object[]{ " 20"," 28"," 36"," 44"," 52"," 72 " }); private JComboBox jcb3=new JComboBox(new Object[]{ "红色","黑色","蓝色","绿色" }); public DrawingBoard(){ JMenuBar Bar=new JMenuBar(); JMenu jmFile=new JMenu("文件"); JMenuItem jmi1=new JMenuItem("新建"); JMenuItem jmi2=new JMenuItem("打开"); JMenuItem jmi3=new JMenuItem("保存"); JMenuItem jmi4=new JMenuItem("退出"); jmFileadd(jmi1); jmFileadd(jmi2); jmFileadd(jmi3); jmFileadd(jmi4); JLabel jlb1=new JLabel("线条"); JLabel jlb2=new JLabel("线宽"); JLabel jlb3=new JLabel("颜色"); final JComboBox jcb1=new JComboBox(new Object[]{ "实线","虚线" }); JButton jbt0=new JButton("直线"); JButton jbt1=new JButton("三角形"); JButton jbt2=new JButton("圆"); JButton jbt3=new JButton("矩形"); JPanel jp1=new JPanel(); jp1add(jlb1); jp1add(jcb1); jp1add(jlb2); jp1add(jcb2); jp1add(jlb3); jp1add(jcb3); jp1add(jbt0); jp1add(jbt1); jp1add(jbt2); jp1add(jbt3); final DrawingPanel jp2=new DrawingPanel(); jp2setBackground(Colorwhite); jp2setPreferredSize(new Dimension(736,300)); thisadd(Bar); thisadd(jp1,BorderLayoutCENTER); thisadd(jp2,BorderLayoutSOUTH);jcb1addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ if(jcb1getSelectedItem()=="实线"){ Graphics g=jp2getGraphics(); gdrawLine(10,10,736,10); } if(jcb1getSelectedItem()=="虚线"){ Graphics g=jp2getGraphics(); for(int i=1;i<100;i++){ gdrawLine(6i-6,50,6i-3,50); } } } });jcb2addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ if(jcb2getSelectedItem()==" 20"){ m=20; repaint(); } if(jcb2getSelectedItem()==" 28"){ m=28;repaint(); } if(jcb2getSelectedItem()==" 36"){ m=36;repaint(); } if(jcb2getSelectedItem()==" 44"){ m=44;repaint(); } if(jcb2getSelectedItem()==" 52"){ m=52;repaint(); } if(jcb2getSelectedItem()==" 72 "){ m=72;repaint(); } } });jcb3addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ if(jcb3getSelectedItem()=="红色"){ color=new Color(255,0,0); repaint(); } if(jcb3getSelectedItem()=="蓝色"){ color=new Color(0,0,255); repaint(); } if(jcb3getSelectedItem()=="黑色"){ color=new Color(0,0,0); repaint(); } if(jcb3getSelectedItem()=="绿色"){ color=new Color(0,128,0); repaint(); } } }); jbt0addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ Graphics g=jp2getGraphics(); gdrawLine(10,10,736,10); } }); jbt1addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ Graphics grap=jp2getGraphics();//创建所画组件对象 grapdrawPolygon(xPoint,yPoint,3); } }); jbt2addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ Graphics gr=jp2getGraphics(); grdrawOval(100,10,200,200); } }); jbt3addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ Graphics G= jp2getGraphics(); GdrawRect(500,50,200,200); } }); } public static void main(String[] args){ JFrame frame=new DrawingBoard(); framesetTitle("测试画图板"); framesetSize(736,379); framesetLocation(100,100); framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE); framesetVisible(true); } static class DrawingPanel extends JPanel{ protected void paintComponent(Graphics g){ superpaintComponent(g); gsetFont(new Font("宋体",FontBOLD,m)); gsetColor(color); gdrawString("Heleoeo ",100, 100); } }}有一些问题还没有解决,因为重画,所以字符串可以重画,别的我没有重画,你自己可以修改一下,还有一个问题,你的菜单条上的功能我暂时不会写,所以没有加上去,希望对你有帮助,一起努力吧!!!

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


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

原文地址: https://outofmemory.cn/yw/13333580.html

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

发表评论

登录后才能评论

评论列表(0条)

保存