用java画笔实现立体矩形
Java基础awtGraphics2D生成矩形图片并向其中画一条直线

Java基础awtGraphics2D⽣成矩形图⽚并向其中画⼀条直线 JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03typesetting :Markdowncodepackage per.jizuiku.gui;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import javax.imageio.ImageIO;/*** @author 给最苦* @date 2019/06/30* @blog /jizuiku*/public class Demo {/*** @param args*/public static void main(String[] args) {try {getImage();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/**** @throws FileNotFoundException* @throws IOException*/public static void getImage() throws FileNotFoundException, IOException {// 得到图⽚缓冲区int width = 100;int height = 50;int imageType = BufferedImage.TYPE_INT_BGR;BufferedImage myImage = new BufferedImage(width, height, imageType);// 得到画笔Graphics2D pen = (Graphics2D)myImage.getGraphics();// 设置笔的颜⾊,即背景⾊pen.setColor(Color.WHITE);// 画出⼀个矩形// 坐标x 坐标y 宽度100 长度50pen.fillRect(0, 0, 100, 50);// 字的颜⾊和背景的颜⾊要不同的pen.setColor(Color.blue);// 划线// 点动成线,线动成⾯,⾯动成体// 两点确定⼀条直线int xStart = 5;int yStart = 15;int xEnd = 60;int yEnd = 30;// 设置线的宽度float lineWidth = 7F;pen.setStroke(new BasicStroke(lineWidth));pen.drawLine(xStart, yStart, xEnd, yEnd);ImageIO.write(myImage, "JPEG", new FileOutputStream("line" + ".jpg")); }}resultsourceCode/*** Draws a line, using the current color, between the points* <code>(x1, y1)</code> and <code>(x2, y2)</code>* in this graphics context's coordinate system.* @param x1 the first point's <i>x</i> coordinate.* @param y1 the first point's <i>y</i> coordinate.* @param x2 the second point's <i>x</i> coordinate.* @param y2 the second point's <i>y</i> coordinate.*/public abstract void drawLine(int x1, int y1, int x2, int y2);resource[ JDK ] [ doc - 参考 ] /en/java/javase/11[ 规范 - 推荐 ] /articles/69327[ 规范 - 推荐 ] google.github.io/styleguide[ 源码 ] [ OS ] [ IDE ] /downloads/packages[ 平台 ] 感谢帮助过给最苦的⼈们。
java实现绘制矩形和椭圆并计算面积和周长

/*本文件由开伟同学亲情提供请将以下代码复制到编译器中,此文档完全免费*/ import java.awt.*;import java.awt.event.*;import javax.swing.*;public classPCJFra me extend s JFrame implem entsAction Liste ner{privat e JRadio Butto n radio_Rec,radio_Ell;privat e JButto n button_pain t;privat e JTextF ieldtext_p erime ter,text_a rea;public JTextF ieldtext_l ength,text_w idth;public int l,w; privat e Rectan gleCa nvasRectan gle;privat e Ellips eCanv as Ellips e;public PCJFra me(){super("绘制平面图形并计算周长和面积");this.setSiz e(600,300);this.setLoc ation(200,100);this.setBac kgrou nd(Color.white);this.setDef aultC loseO perat ion(EXIT_O N_CLO SE);JPanel panel1=new JPanel(new FlowLa yout(1));this.getCon tentP ane().add(panel1,"North");Button Group bgroup=new Button Group();radio_Rec=new JRadio Butto n("矩形",true);panel1.add(radio_Rec);bgroup.add(radio_Rec);radio_Ell=new JRadio Butto n("椭圆",true);panel1.add(radio_Ell);bgroup.add(radio_Ell);panel1.add(new Label("长度/长轴"));text_l ength=new JTextF ield(10);panel1.add(text_l ength);panel1.add(new Label("宽度/短轴"));text_w idth=new JTextF ield(10);panel1.add(text_w idth);button_pain t=new JButto n("绘图");button_pain t.addAct ionLi stene r(this);panel1.add(button_pain t);JPanel panel2=new JPanel(new FlowLa yout(1));this.getCon tentP ane().add(panel2,"South");text_p erime ter=new JTextF ield(20);panel2.add(new Label("周长"));panel2.add(text_p erime ter);text_a rea=new JTextF ield(20);panel2.add(new Label("面积"));panel2.add(text_a rea);this.setVis ible(true);}public void action Perfo rmed(Action Event e){double length=Double.parseD ouble(text_l ength.getTex t());double width=Double.parseD ouble(text_w idth.getTex t());l=(int)length;w=(int)width;if (Rectan gle != null){getCon tentP ane().remove(Rectan gle);}if (Ellips e != null){getCon tentP ane().remove(Ellips e);}Rectan gle=new Rectan gleCa nvas(l,w);Ellips e=new Ellips eCanv as(l,w);if(length>0&&width>0){if(e.getSou rce()==button_pain t){if(radio_Rec.isSele cted()){double perime ter=(width+length)*2;double area=length*width;text_p erime ter.setTex t(""+perime ter);//周长text_a rea.setTex t(""+area);this.getCon tentP ane().add(Rectan gle,"Center");}if(radio_Ell.isSele cted()){double perime ter=3.14*(1.5*(length+width)-Math.sqrt(length*width));double area=3.14*length*width;text_p erime ter.setTex t(""+perime ter);text_a rea.setTex t(""+area);this.getCon tentP ane().add(Ellips e,"Center");}this.setVis ible(true);}}}public static void main(String[] args){new PCJFra me();}}classRectan gleCa nvasextend s Canvas{privat e Colorcolor;privat e int length,width;public Rectan gleCa nvas(int l,int w){this.color=Color.blue;this.length=l;this.width=w;}public void paint(Graphi cs g){g.setCol or(color);g.drawRe ct(150,50,this.length,this.width);g.fillRe ct(150,50,this.length,this.width);}}classEllips eCanv as extend s Canvas{privat e Colorcolor;privat e int length,width;public Ellips eCanv as(int l,int w){this.color=Color.green;this.length=l;this.width=w;}public void paint(Graphi cs g){g.setCol or(color);g.drawOv al(150,50,this.length,this.width);g.fillOv al(150,50,this.length,this.width);}}。
教你如何使用Java输出各种形状

教你如何使⽤Java输出各种形状⽬录1、输出矩形3、输出平⾏四边形4、输出三⾓形5、输出菱形5、输出空⼼菱形6、输出正⽅形7、输出实⼼菱形1、输出矩形以此矩形案例(4⾏,9列的矩形)为例public static void main(String[] args) {//输出矩形for (int i = 1; i <= 4; i++) {//控制⾏,即4⾏for (int j = 1; j <= 9; j++) {//控制输出的*的个数,每⾏9个System.out.print("*");}//换⾏System.out.println();}}输出结果:************************************2、前⾯有空格的矩形以此矩形案例(4⾏,9列的矩形)为例public static void main(String[] args) {//输出前⾯有空格矩形for (int i = 1; i <= 4; i++) {//控制⾏,即4⾏//输出空格for (int k = 1; k <= 5; k++) {//控制空格,即每⾏开始输出5个空格System.out.print(" ");}for (int j = 1; j <= 9; j++) {//控制输出的*的个数,每⾏9个System.out.print("*");}//换⾏System.out.println();}}输出结果:************************************3、输出平⾏四边形以此矩形案例(4⾏,9列的矩形)为例,要变成平⾏四边形第⼀⾏前⾯输出8个空格第⼆⾏前⾯输出7个空格第三⾏前⾯输出6个空格第四⾏前⾯输出5个空格********* 1 8********* 2 7********* 3 6********* 4 5综上所述,得出规律:⾏数+空格数=9public static void main(String[] args) {//输出平⾏四边形for (int i = 1; i <= 4; i++) {//控制⾏,即4⾏//输出空格for (int k = 1; k <= 9 - i; k++) {//控制空格,⾏数+空格数=9,即每⾏开始输出9-i个空格System.out.print(" ");}for (int j = 1; j <= 5; j++) {//控制输出的*的个数,每⾏5个System.out.print("*");}//换⾏System.out.println();}}输出结果:********************4、输出三⾓形以此案例(4⾏)为例,要变成三⾓形第⼀⾏前⾯输出8个空格,1个星第⼆⾏前⾯输出7个空格,3个星第三⾏前⾯输出6个空格,5个星第四⾏前⾯输出5个空格,7个星* 1 8 1*** 2 7 3***** 3 6 5******* 4 5 7综上所述,得出规律:⾏数+空格数=9,2x⾏数-1=星的个数public static void main(String[] args) {//输出三⾓形for (int i = 1; i <= 4; i++) {//控制⾏,即4⾏//输出空格for (int k = 1; k <= 9 - i; k++) {//控制空格,⾏数+空格数=9,即每⾏开始输出9-i个空格System.out.print(" ");}for (int j = 1; j <= 2 * i - 1; j++) {//控制输出的*的个数,2x⾏数-1=星的个数,即每⾏2 * i -1个星 System.out.print("*");}//换⾏System.out.println();}}输出结果:***********5、输出菱形此案例由上⾯三⾓形(4⾏)和下⾯倒三⾓形(3⾏)组合,变成菱形上⾯三⾓形第⼀⾏前⾯输出8个空格,1个星第⼆⾏前⾯输出7个空格,3个星第三⾏前⾯输出6个空格,5个星第四⾏前⾯输出5个空格,7个星下⾯倒三⾓形第⼀⾏前⾯输出6个空格,5个星第⼆⾏前⾯输出7个空格,3个星第三⾏前⾯输出8个空格,1个星* 1 8 1*** 2 7 3***** 3 6 5******* 4 5 7***** 1 6 5*** 2 7 3* 3 8 1综上所述,得出规律:上⾯三⾓形,⾏数+空格数=9,2x⾏数-1=星的个数;下⾯倒三⾓形,⾏数+5=空格数,7-2x⾏数=星的个数public static void main(String[] args) {//输出上⾯三⾓形for (int i = 1; i <= 4; i++) {//控制⾏,即4⾏//输出空格for (int k = 1; k <= 9 - i; k++) {//控制空格,⾏数+空格数=9,即每⾏开始输出9-i个空格System.out.print(" ");}for (int j = 1; j <= 2 * i - 1; j++) {//控制输出的*的个数,2x⾏数-1=星的个数,即每⾏2 * i -1个星System.out.print("*");}//换⾏System.out.println();}//输出下⾯倒三⾓形for (int i = 1; i <= 3; i++) {//控制⾏,即3⾏//输出空格for (int k = 1; k <= i + 5; k++) {//控制空格,⾏数+5=空格数,即每⾏开始输出i+5个空格System.out.print(" ");}for (int j = 1; j <= 7 - 2 * i; j++) {//控制输出的*的个数,7-2x⾏数=星的个数,即每⾏7 - 2 * i个星System.out.print("*");}//换⾏System.out.println();}}输出结果:************************5、输出空⼼菱形此案例由上⾯三⾓形(4⾏)和下⾯倒三⾓形(3⾏)组合,变成菱形,中间星形由空格代替 ** ** ** ** ** **得出规律:在输出星的地⽅,每⾏第⼀个和最后⼀个输出星,其余输出空格public static void main(String[] args) {//输出上⾯三⾓形for (int i = 1; i <= 4; i++) {//控制⾏,即4⾏//输出空格for (int k = 1; k <= 9 - i; k++) {//控制空格,⾏数+空格数=9,即每⾏开始输出9-i个空格System.out.print(" ");}for (int j = 1; j <= 2 * i - 1; j++) {//控制输出的*的个数,2x⾏数-1=星的个数,即每⾏2 * i -1个星//在⾸和尾输出星,其余输出空格if (j == 1 || j == 2 * i - 1) {System.out.print("*");} else {System.out.print(" ");}}//换⾏System.out.println();}//输出下⾯倒三⾓形for (int i = 1; i <= 3; i++) {//控制⾏,即3⾏//输出空格for (int k = 1; k <= i + 5; k++) {//控制空格,⾏数+5=空格数,即每⾏开始输出i+5个空格System.out.print(" ");}for (int j = 1; j <= 7 - 2 * i; j++) {//控制输出的*的个数,7-2x⾏数=星的个数,即每⾏7 - 2 * i个星//在⾸和尾输出星,其余输出空格if (j == 1 || j == 7 - 2 * i) {System.out.print("*");} else {System.out.print(" ");}}//换⾏System.out.println();}}输出结果:** ** ** ** ** **6、输出正⽅形以此案例(5⾏,5列的正⽅形)为例public static void main(String[] args) {//输出正⽅形int len = 5;//正⽅形边长for (int i = 1; i <= len; i++) {//控制⾏,即4⾏for (int j = 1; j <= len; j++) {//输出星,即每⾏输出j个星System.out.print("*");}//换⾏System.out.println();}}输出结果:*************************7、输出实⼼菱形以此案例(5⾏,5列)为例第⼀⾏第⼀个和最后⼀个星的位置是3和3第⼆⾏第⼀个和最后⼀个星的位置是2和4第三⾏第⼀个和最后⼀个星的位置是1和5第四⾏第⼀个和最后⼀个星的位置是2和4第五⾏第⼀个和最后⼀个星的位置是3和3* 1 3 3*** 2 2 4***** 3 1 5*** 4 2 4* 5 3 3public static void main(String[] args) {//输出实⼼菱形int len = 5;//边长int first = len / 2 + 1;//开始输出星的位置int end = len / 2 + 1;//结束输出星的位置boolean flag = true;//如果是上半部三⾓形则是true,如果是下半倒三⾓形则是false for (int i = 1; i <= len; i++) {//控制⾏,即4⾏for (int j = 1; j <= len; j++) {//输出星,即每⾏输出j个星if (j >= first && j <= end) {//在每⾏的起始⾄结束位置输出星System.out.print("*");} else {System.out.print(" ");}}//换⾏System.out.println();if(end == len){//最后⼀个星位置是边长宽度flag = false;//下⼀⾏,马上执⾏下半部倒三⾓形}if(flag){//在上半三⾓形,开始输出星的位置first前移1,结束输出星的位置end后移1 first--;end++;}else {//在下半倒三⾓形,开始输出星的位置first后移1,结束输出星的位置end前移1 first++;end--;}}}输出结果:*************如果想输出空⼼菱形则只需要将:if (j >= first && j <= end)改成:if (j == first || j == end)到此这篇关于教你如何使⽤Java输出各种形状的⽂章就介绍到这了,更多相关Java输出形状内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
用java编写画图程序

Java中的graphics类提供了画布,可以在graphic面画出各种形状,包括图片,各种线条,字符串,各种图像。
下面这个程序用java编写一个程序用来画图,类似于ppt中的画笔功能。
vimport javax.swing.*;import java.awt.*;import java.awt.event.*;public class drawtest1 {public static void main(String args[]){draw d=new draw();// d.drawline();}}class draw extends JFrame implements MouseListener,MouseMotionListener,ActionListener {Graphics g;Color color=Color.green ;Color color1=Color.gray ;int startx,starty,endx,endy;JPanel p1,p2;JButton []btns=new JButton[4];String title[]={"设置前景色","设置背景色","设置画笔颜色","清除画布"};public draw(){super("画图");this.show();this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );setSize(700,600);setLayout(null);p1=new JPanel();p2=new JPanel();for(int i=0;i<4;i++){btns[i]=new JButton(title[i]);btns[i].addActionListener(this);add(btns[i]);}p1.setBorder(BorderFactory.createTitledBorder("设置颜色"));p1.setBackground(Color.white );p1.setBounds(30,10,140,240);btns[0].setBounds(50,40,100,30);btns[1].setBounds(50,90,100,30);btns[2].setBounds(50,140,100,30);btns[3].setBounds(50,190,100,30);add(p1);g=this.getGraphics();g.setClip(180,50,500,500);addMouseListener(this);addMouseMotionListener(this);}// public void paint(Graphics g){// //重绘画布,当移动此画布或者覆盖此画布时,图像不会消失//// g.setColor(Color.white );//// g.drawString("画图板",20,30);// }public void mouseClicked(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {if(e.getButton()==MouseEvent.BUTTON1 ){startx=e.getX();starty=e.getY();System.out.println("鼠标左键被按下");}else if(e.getButton()==MouseEvent.BUTTON3 ){System.out.println("鼠标右键被按下");}}public void mouseReleased(MouseEvent e) {}public void mouseDragged(MouseEvent e) {g.setColor(color );g.drawLine(startx,starty,e.getX(),e.getY());startx=e.getX();starty=e.getY();}public void mouseMoved(MouseEvent e) {}public void actionPerformed(ActionEvent e){Object o=e.getSource();if(o==btns[2]){color=JColorChooser.showDialog(null,"设置画笔颜色",Color.white );g.setColor(color);}if(o==btns[1]){color1=JColorChooser.showDialog(null,"设置背景色",Color.black );g.setColor(color1);g.fillRect(0,0,this.getWidth() ,this.getHeight());}if(o==btns[3]){g.setColor(color1);g.fillRect(0,0,this.getWidth() ,this.getHeight());}}}。
java fillrect方法

Java中的fillRect方法是用来绘制填充矩形的一个重要方法。
在Java 的图形界面编程中,经常需要使用各种图形绘制方法来展示数据、制作游戏界面或者设计用户界面。
fillRect方法就是其中之一,它可以绘制一个填充颜色的矩形,是非常常用的一种绘制方法。
1. fillRect方法的基本语法在Java中,fillRect方法的基本语法如下所示:```javavoid fillRect(int x, int y, int width, int height)```其中,x和y表示矩形的左上角的坐标,width和height表示矩形的宽和高。
这个方法的作用是绘制一个以(x, y)为左上角,宽为width,高为height的填充矩形。
2. fillRect方法的具体用法fillRect方法通常会和其他图形绘制方法一起使用,比如在画布上绘制一个矩形作为背景,或者在游戏界面中绘制各种各样的图形。
在使用fillRect方法时,需要先获取到Graphics对象,然后调用该对象的fillRect方法来进行绘制。
3. fillRect方法的示例代码下面是一个简单的示例代码,演示了如何使用fillRect方法在一个窗口上绘制一个红色的填充矩形:```javaimport java.awt.*;import javax.swing.*;public class FillRectExample extends JFrame {public FillRectExample() {setTitle("FillRect Example");setSize(300, 200);setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);}public void p本人nt(Graphics g) {g.setColor(Color.RED);g.fillRect(50, 50, 200, 100);}public static void m本人n(String[] args) {new FillRectExample();}}```在这个示例代码中,我们首先创建一个继承自JFrame的窗口类FillRectExample。
java 实现绘图

}
public static void main (String[] args) {//测试
JFrame frame=new JFrame("绘制图形");
Container contentPane=frame.getContentPane();
setBorder(BorderFactory.createTitledBorder("设置不同画笔画图"));
setSize(w,h);
}
public void paint( Graphics g ) {
super.paint(g);
Graphics2D g2d=(Graphics2D)g;//把父类对象强制转化为子类对象
gg.fillOval(5,5,5,5); //缓冲区右下1/4区域画绿色填充圆
//创建纹理:用缓冲区图形作为纹理
TexturePaint mypaint=new TexturePaint(buffImage, new Rectangle(10,10));
g2d.setPaint(mypaint); //设置纹理画笔
}
}
else if(myDraw==My_GradientPaint){ //2.画绿-红渐变色的填充椭圆
GradientPaint gradColor=
new GradientPaint(0,0,Color.green, 10,10,Color.red,true);
frame.setSize(500,500);
frame.setVisible(true);
基于Java的简易几何画板的实现

; ot{ aui r y i ; mp r j . I r L t v t. a s a A
mp r j auitrt o v . } eao t a tI l
主 界 面 由 两个 J ae 组 成 ,分 别 为 工 具 箱 和 画板 两 部 分 。 P nl
蚺
》
p bi ls a n o r u l ca s DrwigB ad{ c
果 。 具 体 实 现 如下 :
p k g rw n b ad: I c tj aa . a h s D; mp r a wt p i 2 v Gr c
i p tjv w t ma e m or a a a . 1 g1
.
i otj aa .on; mp r a . P i v wt t
P p ; = o
p b c sai e u Pc y e / 图 类 型 u l tt n m i p ( ̄ i c T /
¨ e / 线 n ,直 /
c re∥ uv , 曲线
) Drw ig o r P da I a e( a ig a d M yma e a n B ad.G.rw m g Drw n B0 r . l g ,
第
. .
p bi sai A ry i < on> P i L t/ 录绘 图的 点 集 u l tt r Ls P i c c a t t on i I记 t s/
绘制java图形代码

绘制java图形代码import java.awt.*;import java.math.*;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionAdapter;public class后立圆extends JFrame implements ActionListener { JMenuBar bar;JMenu menu,menu1;hou panel = new hou();JMenuItem [] item = new JMenuItem[3];JMenuItem [] item1 = new JMenuItem[2];JButton button1,button2,button3,button4;后立圆(){super("绘制图像");this.setSize(700,500);this.setLocation(0,0);bar = new JMenuBar();this.setJMenuBar(bar);menu = new JMenu("绘制空型图");menu1 = new JMenu("绘制实型图");item[0] = new JMenuItem("直线");item[1] = new JMenuItem("椭圆");item[2] = new JMenuItem("矩形");item1[0] = new JMenuItem("实型椭圆");item1[1] = new JMenuItem("实型矩形");button4 = new JButton("橡皮擦");item[0].addActionListener(this);item[1].addActionListener(this);item[2].addActionListener(this);item1[0].addActionListener(this);item1[1].addActionListener(this);button4.addActionListener(this);menu.add(item[0]);menu.addSeparator();menu.add(item[1]);menu.addSeparator();menu.add(item[2]);menu1.add(item1[0]);menu1.addSeparator();menu1.add(item1[1]);menu1.addSeparator();button1 = new JButton("更改画笔颜色");button2 = new JButton("清屏");button3 = new JButton("退出");button1.addActionListener(this);button2.addActionListener(this);button3.addActionListener(this);bar.add(menu);bar.add(menu1);bar.add(button1);bar.add(button4);bar.add(button2);bar.add(button3);this.add(panel);this.setVisible(true);this.setResizable(true);}public static void main(String[] args){new后立圆();}public void actionPerformed(ActionEvent e){Object source = e.getSource();for(int i=0;i<4;i++){if(source==item[0]){panel.setDrawStyle("直线");}if(source==item[1]){panel.setDrawStyle("椭圆");}if(source==item[2]){panel.setDrawStyle("矩形");}}for(int j=0;j<2;j++){if(source==item1[0]){panel.setDrawStyle("实型椭圆");}if(source==item1[1]){panel.setDrawStyle("实型矩形");}}if(source==button4){panel.setDrawStyle("橡皮擦");}if(source==button1){Color c =JColorChooser.showDialog(null, "颜色选择", Color.GREEN);panel.setDrawman(c);}if(source==button2){Graphics p =panel.getGraphics();p.clearRect(0, 0, this.getWidth(), this.getHeight());}if(source==button3){this.dispose();}}class hou extends JPanel {startPoint = new Point(0,0);Point lastEndPoint = new Point(0,0);Point thisEndPoint = new Point(0,0);Point finalEndPoint = new Point(0,0);public String drawStyle = null;boolean figureState = false;boolean firstDraw = true;Color d;public hou(){addMouseListener(new MouseAdapter(){public void mousePressed(MouseEvent e){startPoint.x= lastEndPoint.x= thisEndPoint.x= e.getPoint().x;startPoint.y= lastEndPoint.y= thisEndPoint.y= e.getPoint().y; setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));figureState = true;}public void mouseReleased(MouseEvent e){finalEndPoint.x = e.getPoint().x;finalEndPoint.y = e.getPoint().y;setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));Graphics g = getGraphics();g.setXORMode(getBackground());if(firstDraw)drawFigure(g,startPoint,finalEndPoint);g.dispose();figureState = false;firstDraw = true;}});addMouseMotionListener(new MouseMotionAdapter(){public void mouseDragged(MouseEvent e){Graphics g = getGraphics();g.setXORMode(getBackground());if(figureState){lastEndPoint.x = thisEndPoint.x;lastEndPoint.y = thisEndPoint.y;thisEndPoint.x = e.getPoint().x;thisEndPoint.y = e.getPoint().y;}if(firstDraw){drawFigure(g,startPoint,thisEndPoint);firstDraw = false;}else {drawFigure(g,startPoint,lastEndPoint);drawFigure(g,startPoint,thisEndPoint);}g.dispose();}});}public void setDrawStyle(String style){drawStyle = style;}public void setDrawman(Color c){d=c;}public void drawFigure(Graphics g,Point start,Point end){g.setColor(d);if(drawStyle == "直线"){g.drawLine(start.x,start.y,end.x,end.y);}else if(drawStyle == "矩形"){int x = start.x ,y = start.y;if(end.x < start.x) x = end.x;if(end.y < start.y) y = end.y;g.drawRect(x,y,Math.abs(end.x - start.x),Math.abs(end.y - start.y));}else if(drawStyle == "椭圆"){int x = start.x ,y = start.y;if(end.x < start.x) x = end.x;if(end.y < start.y) y = end.y;g.drawOval(x,y,Math.abs(end.x-start.x),Math.abs(end.y - start.y));}else if(drawStyle =="橡皮擦"){i nt x = start.x ,y = start.y;s etCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));g.clearRect(x, y, 10, 10);}else if(drawStyle == "实型矩形"){int x = start.x ,y = start.y;if(end.x < start.x) x = end.x;if(end.y < start.y) y = end.y;g.fillRect(x,y,Math.abs(end.x - start.x),Math.abs(end.y - start.y));}else if(drawStyle == "实型椭圆"){int x = start.x ,y = start.y;if(end.x < start.x) x = end.x;if(end.y < start.y) y = end.y;g.fillOval(x,y,Math.abs(end.x-start.x),Math.abs(end.y - start.y));}}}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用java画笔实现立体矩形,定义参数包括颜色,矩形高、矩形宽和显示位置等。
显示效果:
代码如下:
package rect3d;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
/*
* 实现根据参数画出立体矩形(参数包括:位置,高,宽,颜色)
*/
publicclass Rect3d extends JFrame {
/**
*
*/
privatestaticfinallong serialVersionUID = 1801465896810962139L;
int x=0,y=0,h=0,w=0;
Color color;
public Rect3d(){
JPanel p1=new JPanel() {
/**
*
*/
privatestaticfinallong serialVersionUID = -6088139813345542157L;
publicvoid paint(Graphics g){
super.paint(g);
color=Color.RED;
x=340;
y=100;
h=400;
w=90;
getrect(g,color,x,y,h,w);//调用方法
}
};
this.add(p1);
this.setTitle(null);
this.setSize(800,600);//界面大小
this.setLocationRelativeTo(null);//屏幕居中
this.setDefaultCloseOperation(JFrame.EXIT_ON _CLOSE);
this.setVisible(true);
}
publicstaticvoid main(String[] args) { // TODO自动生成的方法存根
new Rect3d();
}
void getrect(Graphics
g,Color c1,int x,int y,int h,int w){//根据参数画立体矩形
g.setColor(new
Color(c1.getRed(),c1.getGreen(),c1.getBlue(),10
0));
g.fillRect(x+w/3, y-w/3, w, h);//后矩形
for(int i=0;i<w/3;i++) {
g.drawLine(x+i, y-i,x+i, y);//矩形上左角
}
for(int i=0;i<w/3;i++) {
g.drawLine(x+w+i, y-i,x+w+i, y+h-i);//右矩形
}
g.setColor(new
Color(c1.getRed(),c1.getGreen(),c1.getBlue(),15
5));
g.fillRect(x, y, w, h);//前矩形
g.drawLine(x+w+w/3, y-w/3,x+w, y);//矩形上右角
g.drawLine(x, y+h,x+w/3, y+h-w/3);//矩形上右角
}
}。