问题描述
请问如何用Graphics类画三角形?
解决方案
解决方案二:
用drawLine画3条线
解决方案三:
importjava.awt.Graphics;importjava.awt.Graphics2D;importjava.awt.Point;importjava.awt.RenderingHints;importjava.awt.geom.GeneralPath;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.SwingUtilities;@SuppressWarnings("serial")publicclassTrianglePainterextendsJPanel{privateTriangletriangle;publicTrianglePainter(){triangle=newTriangle(newPoint(20,20),newPoint(100,100),newPoint(10,100));}@OverrideprotectedvoidpaintComponent(Graphicsg){super.paintComponent(g);Graphics2Dg2d=(Graphics2D)g;g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);triangle.draw(g2d);g2d.translate(150,150);triangle.fill(g2d);}privatestaticvoidcreateGuiAndShow(){JFrameframe=newJFrame("三角形");frame.getContentPane().add(newTrianglePainter());frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400,400);frame.setAlwaysOnTop(true);frame.setLocationRelativeTo(null);frame.setVisible(true);}publicstaticvoidmain(String[]args){SwingUtilities.invokeLater(newRunnable(){@Overridepublicvoidrun(){createGuiAndShow();}});}}//定义一个三角形类classTriangle{privatePointp1;privatePointp2;privatePointp3;privateGeneralPathpath;//使用三个点构建一个三角形publicTriangle(Pointp1,Pointp2,Pointp3){this.p1=p1;this.p2=p2;this.p3=p3;this.path=buildPath();}//绘制三角形边publicvoiddraw(Graphics2Dg2d){g2d.draw(path);}//填充三角形publicvoidfill(Graphics2Dg2d){g2d.fill(path);}//创建三角形外形的路径privateGeneralPathbuildPath(){path=newGeneralPath();path.moveTo(p1.x,p1.y);path.lineTo(p2.x,p2.y);path.lineTo(p3.x,p3.y);path.closePath();returnpath;}}
解决方案四:
让Triangle实现Shape更好吧
解决方案五:
classPainterPanelextendsJPanelimplementsMouseListener{intshape=-1;//图案类型Point[]point=newPoint[2];//记录鼠标拖动的起始点和终点//构造函数**********************************************publicPainterPanel(){super();//调用父类构造函数this.setBackground(Color.white);//设置背景颜色(JPanel成员)其他成员对绘图没有实质性的帮助point[0]=newPoint(-1,-1);//初始化变量point[1]=newPoint(-1,-1);addMouseListener(this);//增加鼠标事件}//构造函数************************************************publicvoidmouseReleased(MouseEvente){//鼠标释放事件point[1]=newPoint(e.getX(),e.getY());//设置终点位置repaint();//重绘屏幕}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}publicvoidmouseClicked(MouseEvente){}publicvoidmousePressed(MouseEvente){//鼠标按下时事件point[0]=newPoint(e.getX(),e.getY());//设置起始点位置}publicvoidpaint(Graphicsg){super.paint(g);switch(shape){//根据shape值绘制图形case0:g.drawLine(point[0].x,point[0].y,point[1].x,point[1].y);//绘线break;case1:intwidth=point[1].x-point[0].x;intheight=point[1].y-point[0].y;g.drawOval(point[0].x,point[0].y,width,height);//绘椭圆break;case2:width=point[1].x-point[0].x;height=point[1].y-point[0].y;g.drawRect(point[0].x,point[0].y,width,height);//绘矩形break;}}publicvoiddrawShape(intshape){this.shape=shape;}}目前写的代码是这样我不知道如何得到3个不同的点的坐标画3跳线
解决方案六:
想出来了加个鼠标单击事件importjava.awt.*;importjava.awt.event.*;//包含MouseListenerimportjavax.swing.*;importjavax.swing.event.*;classPainterPanelextendsJPanelimplementsMouseListener{intshape=-1;//图案类型Point[]point=newPoint[3];//记录鼠标拖动的起始点和终点//构造函数**********************************************publicPainterPanel(){super();//调用父类构造函数this.setBackground(Color.white);//设置背景颜色(JPanel成员)其他成员对绘图没有实质性的帮助point[0]=newPoint(-1,-1);//初始化变量point[1]=newPoint(-1,-1);addMouseListener(this);//增加鼠标事件}//构造函数************************************************publicvoidmouseReleased(MouseEvente){//鼠标释放事件point[1]=newPoint(e.getX(),e.getY());//设置终点位置repaint();//重绘屏幕}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}publicvoidmouseClicked(MouseEvente){point[2]=newPoint(e.getX(),e.getY());}publicvoidmousePressed(MouseEvente){//鼠标按下时事件point[0]=newPoint(e.getX(),e.getY());//设置起始点位置}publicvoidpaint(Graphicsg){super.paint(g);switch(shape){//根据shape值绘制图形case0:g.drawLine(point[0].x,point[0].y,point[1].x,point[1].y);//绘线break;case1:intwidth=point[1].x-point[0].x;intheight=point[1].y-point[0].y;g.drawOval(point[0].x,point[0].y,width,height);//绘椭圆break;case2:width=point[1].x-point[0].x;height=point[1].y-point[0].y;g.drawRect(point[0].x,point[0].y,width,height);//绘矩形break;case3:g.drawLine(point[0].x,point[0].y,point[1].x,point[1].y);g.drawLine(point[0].x,point[0].y,point[2].x,point[2].y);g.drawLine(point[2].x,point[2].y,point[1].x,point[1].y);break;}}publicvoiddrawShape(intshape){this.shape=shape;}}publicclassPainterDemoextendsJFrame{JToggleButton[]button=newJToggleButton[4];//按钮组PainterPanelpainter=newPainterPanel();//绘图面板上面构造了publicPainterDemo(){super("Java随手画");//调用父类构造函数String[]buttonName={"直线","椭圆","矩形","三角形"};//按钮文字DrawShapeListenerbuttonListener=newDrawShapeListener();//按钮事件JToolBartoolBar=newJToolBar();//实例化工具栏ButtonGroupbuttonGroup=newButtonGroup();//实例化按钮组for(inti=0;i<button.length;i++){button[i]=newJToggleButton(buttonName[i]);//实例化按钮button[i].addActionListener(buttonListener);//增加按钮事件处理buttonGroup.add(button[i]);//增加按钮到按钮组toolBar.add(button[i]);//增加按钮到工具栏}Containercontainer=getContentPane();//得到窗口容器container.add(toolBar,BorderLayout.NORTH);//增加组件到容器上container.add(painter,BorderLayout.CENTER);setSize(300,200);//设置窗口尺寸setVisible(true);//设置窗口为可视setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时退出程序}//内部类classDrawShapeListenerimplementsActionListener{//按钮事件处理publicvoidactionPerformed(ActionEvente){for(inti=0;i<button.length;i++){if(e.getSource()==button[i]){//判断来自于哪个按钮painter.drawShape(i);//绘制图形}}}}publicstaticvoidmain(String[]args){newPainterDemo();}}
解决方案七:
画三条线不错。只要确定3个点,然后点到点画三条线。
解决方案八:
该回复于2011-01-15 08:50:10被版主删除