如何用Graphics类画三角形?

问题描述

请问如何用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被版主删除

时间: 2024-08-04 12:50:44

如何用Graphics类画三角形?的相关文章

c# #-C#用Graphics 定义一个Mycircle类画圆,如何在类外改变画笔颜色再画一个圆

问题描述 C#用Graphics 定义一个Mycircle类画圆,如何在类外改变画笔颜色再画一个圆 class MyCircle { int x; int y; int r; public MyCircle(int x, int y, int r) { this.x = x; this.y = y; this.r = r; } public override void Draw(Graphics g) { Random rd = new Random(); int red, blue, gree

使用Java的Graphics类进行绘图的方法详解_java

Graphics类提供基本绘图方法,Graphics2D类提供更强大的绘图能力.本节讲解Graphics类,下节讲解Graphics2D. Graphics类提供基本的几何图形绘制方法,主要有:画线段.画矩形.画圆.画带颜色的图形.画椭圆.画圆弧.画多边形等. 1. 画线 在窗口画一条线段,可以使用Graphics类的drawLine()方法:   drawLine(int x1,int y1,int x2,int y2) 例如,以下代码在点(3,3)与点(50,50)之间画线段,在点(100,

c#-为何用Graphics.DrawString(...) 生成的文字图片的效果和原字体不同?

问题描述 为何用Graphics.DrawString(...) 生成的文字图片的效果和原字体不同? 我的应用要求是使用自定义字体 生成图片.我使用了.NET 的 Graphics.DrawString(...) 来生成图片,但生成图片的效果和在Label控件内使用相同的字体效果不同(如下图所示).最明显的是"欢"子明显要细很多.我想知道的是如何能让"欢"显示与其他字同样的粗细.如果不能用DrawString(..)来达到这个目的.有没有其它方法可以用指定的字体来生

在asp中应用vb语言调用Graphics 类

问题描述 在asp中应用vb语言调用Graphics 类 小弟初学asp,在asp中应用vb语言调用Graphics 类,怎么定义具体实现的功能与Graphics g = this.CreateGraphics(); 功能与这句相同 解决方案 asp没有内置绘图软件,也无法直接调用vb.net的,找persits.jpeg这个组件 http://www.greenxf.com/soft/40232.html http://www.cnblogs.com/ly312/archive/2010/10

vc60-如何用vc6.0画自定义按钮

问题描述 如何用vc6.0画自定义按钮 想要自制按钮,就是按下之后会亮的那种,用vc怎么画,或者说哪里有资源吗 解决方案 参考:http://blog.csdn.net/lightboat09/article/details/6069710http://download.csdn.net/detail/nexuiz2/3445593 解决方案二: setwindowlong子类化按钮,在wndproc里拦截WM_PAINT消息,使用GDI/GDI+或其他的绘图,返回0阻止系统重画 解决方案三:

用VS2013编译opengl编程宝典第五版的第一个画三角形的例子,编译后程序运行不了

问题描述 用VS2013编译opengl编程宝典第五版的第一个画三角形的例子,编译后程序运行不了 代码如下: #include #include #define FERRGLUT_STATIC #include #include GLBatch trianglebatch; GLShaderManager shadermanager; int main(int argc, char* argv[]) { void RenderScene(); void ChangeSize(int w, int

如何用创建类的方法建立一个用户登陆界面

问题描述 如何用创建类的方法建立一个用户登陆界面 初学vb,建立一个简单的登陆Form,使用创建类的方法,事先设立一个密码和用户名,在登陆时,提醒密码和登陆名错误,若成功时跳到下一个Form,不会编写代码以及方法的调用 解决方案 可以写成一个自定义控件,继承Form.这样使用的使用可以使用New 解决方案二: 参考:http://blog.csdn.net/wuyazhe/article/details/5642431 解决方案三: 又不是.net,直接用 form1.show 1 不就可以了?

java用接口、多态、继承、类计算三角形和矩形周长及面积的方法_java

本文实例讲述了java用接口.多态.继承.类计算三角形和矩形周长及面积的方法.分享给大家供大家参考.具体如下: 定义接口规范: /** * @author vvv * @date 2013-8-10 上午08:56:48 */ package com.duotai; /** * * */ public interface Shape { public double area(); public double longer(); } /** * @author vvv * @date 2013-8

[求助]求关于Graphics类的介绍,不论是技术方面还是。。。。

问题描述 现在在写论文,由于在系统中使用的Graphics类作为主要技术实现.在写到使用的主要技术时想介绍下Graphics类的起源,作用什么的,但是在Baidu中搜不到这方面的资料.现在只能求助CSDN中的各位大大了...拜托了...请各位如果有这方面的资料请不吝赐教