Java画图软件制作
实现了简单的电脑画图软件,代码如下:
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Random;
import javax.swing.*;
public class MYPAINT extends JFrame
{
private int flag = 1; //功能端
private JButton bpan = new JButton(" 画笔 ");
private JButton bxpc = new JButton("橡皮擦");
private JButton bwbk = new JButton("文本框");
private JButton bqk = new JButton("清空");
private JButton bpq = new JButton("喷漆");
private JButton bb = new JButton("B");
private JButton bzfx = new JButton("矩形");
private JButton bsjx = new JButton("三角形");
private JButton byx = new JButton("圆形");
private JButton bty = new JButton("椭圆");
private JButton byjjx = new JButton("圆角矩形");
private JButton bzx = new JButton("直线");
private JRadioButton issx = new JRadioButton("是否实心");
private JLabel lnowc = new JLabel("当前\n颜色: ");
private JButton bhong = new JButton();
private JButton bhuang = new JButton();
private JButton bcolor = new JButton();
private JButton blan = new JButton();
private JButton blv = new JButton();
private JButton bmore = new JButton("更多");
private JLabel lzt = new JLabel("字体:");
private String str[] = {
"宋体", "隶书", "华文彩云", "仿宋_GB2312", "华文行楷","方正舒体"
};
private String nzt = new String(" 宋体 ");
private JComboBox czt = new JComboBox(str);
private JLabel lcx = new JLabel("粗细:");
private TextField tcx = new TextField("5",10);
private JCheckBox rb = new JCheckBox("粗体");
private JCheckBox ri = new JCheckBox("斜体");
private int isb ;
private int isi ;
private TextField stata = new TextField(30); //创建文本框对象,长度为30个字符
private JPanel tool = new JPanel();
private MyCanvas pmain = new MyCanvas();
private JPanel p1 = new JPanel();//工具
private JPanel p2 = new JPanel();//形状
private JPanel p3 = new JPanel();//颜色
private JPanel p4 = new JPanel();//文本
private Label p5 = new Label();//
private PAN a = new PAN();
private int MAX = 0;
private int R=0, G=00, B=0;
private shap[] csave = new shap[10000];
public MYPAINT()
{
setLocation(600,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(1080, 960);
setLocationRelativeTo(null);
setVisible(true);
//this.setResizable(false);
GridBagLayout gridbag = new GridBagLayout();
tool.setLayout(gridbag);
tool.add(p1);tool.add(p2);tool.add(p3);tool.add(p4);tool.add(p5);
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridwidth=1;//该方法是设置组件水平所占用的格子数,如果为0,就说明该组件是该行的最后一个
gbc.weightx = 0;//该方法设置组件水平的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
gbc.weighty=0;//该方法设置组件垂直的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
gridbag.setConstraints(p1, gbc);//设置组件
p1.setLayout(new GridLayout(3,2));
JPanel tp11 = new JPanel();JPanel tp22 = new JPanel();JPanel tp33 = new JPanel();JPanel tp44 = new JPanel();JPanel tp55 = new JPanel();JPanel tp66 = new JPanel();
p1.setBorder(BorderFactory.createTitledBorder("工具"));
tp11.add(bpan);tp22.add(bxpc);tp33.add(bwbk);tp44.add(bqk);tp55.add(bpq);tp66.add(bb);
p1.add(tp11);p1.add(tp22);p1.add(tp33);p1.add(tp44);p1.add(tp55);p1.add(tp66);
gbc.gridwidth=1;
gbc.weightx = 0;
gbc.weighty=0;
gridbag.setConstraints(p2,gbc);
p2.setBorder(BorderFactory.createTitledBorder("形状"));
p2.setLayout(new GridLayout(3,4));
JPanel tp20= new JPanel(); JPanel tp21= new JPanel();
p2.add(bzfx);p2.add(bsjx);p2.add(byx);p2.add(bty);p2.add(byjjx);p2.add(bzx);p2.add(tp20);p2.add(tp21);p2.add(issx);
gbc.gridwidth=1;
gbc.weightx = 0;
gbc.weighty=0;
gridbag.setConstraints(p3,gbc);
p3.setBorder(BorderFactory.createTitledBorder("颜色"));
p3.setLayout(new GridLayout(3,2));
JPanel pbcolor = new JPanel();pbcolor.add(bcolor);
p3.add(lnowc);p3.add(bhong);p3.add(bhuang);p3.add(pbcolor);;p3.add(blan);p3.add(blv);p3.add(new Label());p3.add(new Label());p3.add(bmore);
bcolor.setBackground(new Color(R,G,B));;bhong.setBackground(Color.RED); bhuang.setBackground(Color.yellow);
blan.setBackground(Color.BLUE);blv.setBackground(Color.GREEN);
gbc.gridwidth=1;
gbc.weightx = 0;
gbc.weighty=0;
gridbag.setConstraints(p4,gbc);
p4.setBorder(BorderFactory.createTitledBorder("文本"));
JPanel tp0 = new JPanel();
czt.setPreferredSize(new Dimension(100,20));
tp0.add(lzt);tp0.add(czt);
JPanel tp1 = new JPanel();
czt.addItemListener(
new ItemListener() {
public void itemStateChanged(ItemEvent e) {
nzt = str[czt.getSelectedIndex()];
System.out.println(nzt);
}
});
tcx.addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e) {
int keyChar = e.getKeyChar();
if(keyChar >= KeyEvent.VK_0 && keyChar <= KeyEvent.VK_9){
}else{
e.consume(); //屏蔽掉非法输入
}
}
});
JPanel tp2 = new JPanel();tp2.add(ri);tp2.add(rb);
checkBox han = new checkBox();
ri.addItemListener(han);rb.addItemListener(han);
tp1.add(lcx);tp1.add(tcx);
p4.setLayout(new GridLayout(3,1));
p4.add(tp1); p4.add(tp0);p4.add(tp2);
gbc.gridwidth=0;//该方法是设置组件水平所占用的格子数,如果为0,就说明该组件是该行的最后一个
gbc.weightx = 1;//不能为1,j4是占了4个格,并且可以横向拉伸,
gbc.weighty=0;
gridbag.setConstraints(p5,gbc);
/**TOOL结束,画板开始***/
pmain.setBorder(BorderFactory.createTitledBorder("画板"));
pmain.setBackground(Color.WHITE);
dosave();
bpan.addActionListener(new ActionListener() {//画笔
@Override
public void actionPerformed(ActionEvent e) {flag = 1;}});
bpq.addActionListener(new ActionListener() {//喷漆
@Override
public void actionPerformed(ActionEvent e) {flag = 15;}});
bxpc.addActionListener(new ActionListener() {//橡皮擦
@Override
public void actionPerformed(ActionEvent e) {flag = 2;}});
bwbk.addActionListener(new ActionListener() {//文本框
@Override
public void actionPerformed(ActionEvent e) {flag = 3;}});
bqk.addActionListener(new ActionListener() {//清空
@Override
public void actionPerformed(ActionEvent e) {MAX=0;repaint();}});
bzfx.addActionListener(new ActionListener() {//矩形
@Override
public void actionPerformed(ActionEvent e) {
if(issx.isSelected())
flag = 5;
else
flag = 4;
}});
bsjx.addActionListener(new ActionListener() {//三角形
@Override
public void actionPerformed(ActionEvent e) {
if(issx.isSelected())
flag = 7;
else
flag = 6;}});
byx.addActionListener(new ActionListener() {//圆形
@Override
public void actionPerformed(ActionEvent e) {
if(issx.isSelected())
flag = 9;
else
flag = 8;}});
bty.addActionListener(new ActionListener() {//椭圆
@Override
public void actionPerformed(ActionEvent e) {
if(issx.isSelected())
flag = 11;
else
flag = 10;}});
byjjx.addActionListener(new ActionListener() {//圆角矩形
@Override
public void actionPerformed(ActionEvent e) {
if(issx.isSelected())
flag = 13;
else
flag = 12;}});
bzx.addActionListener(new ActionListener() {//直线
@Override
public void actionPerformed(ActionEvent e) {flag = 14;}});
bhong.addActionListener(new ActionListener() {//红
@Override
public void actionPerformed(ActionEvent e) {R = 255;G = 0;B = 0; bcolor.setBackground(new Color(R,G,B));}});
bhuang.addActionListener(new ActionListener() {//黄
@Override
public void actionPerformed(ActionEvent e) {R = 255;G = 255;B = 0; bcolor.setBackground(new Color(R,G,B));}});
blan.addActionListener(new ActionListener() {//蓝
@Override
public void actionPerformed(ActionEvent e) {R = 0;G = 0;B = 255; bcolor.setBackground(new Color(R,G,B));}});
blv.addActionListener(new ActionListener() {//绿
@Override
public void actionPerformed(ActionEvent e) {R = 0;G = 255;B = 0; bcolor.setBackground(new Color(R,G,B));}});
bmore.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
Color color=new Color(200,200,200);
color=JColorChooser.showDialog(null,"请选择你喜欢的颜色" ,color);
R = color.getRed();
B = color.getBlue();
G = color.getGreen();
bcolor.setBackground(new Color(R,G,B));
}
});
bwbk.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
flag = 3;
}
});
bb.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
if(MAX!=0)
MAX--;
repaint();
}
});
add(tool,"North");
add(pmain,"Center");
add(stata,"South");
stata.setEditable(false);
}
//画图面板类,用来画图
class MyCanvas extends JPanel {
public MyCanvas() {
setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
setBackground(Color.white);
addMouseListener(new mousec());
addMouseMotionListener(new mousec());
JPanel a = new JPanel();
}
@Override
public void paintComponent(Graphics g0) {
super.paintComponent(g0);
Graphics2D g = (Graphics2D) g0;
int i = 0;
while(i<=MAX)
{
//System.out.println("xx"+MAX);
draw(g,csave[i++]);
}
}
void draw(Graphics2D g, shap s) {
s.draw(g);//画
}
}
//保存画过的图像
void dosave()
{
switch(flag)
{
case 1:csave[MAX] = new PAN(); break;
case 2:csave[MAX] = new XPC(); break;
case 3:csave[MAX] = new TEXT(); break;
case 4:csave[MAX] = new ZFX(); break;
case 5:csave[MAX] = new SZFX(); break;
case 6:csave[MAX] = new SJX(); break;
case 7:csave[MAX] = new SSJX(); break;
case 8:csave[MAX] = new YX(); break;
case 9:csave[MAX] = new SYX(); break;
case 10:csave[MAX] = new TY(); break;
case 11:csave[MAX] = new STY(); break;
case 12:csave[MAX] = new YJJX(); break;
case 13:csave[MAX] = new SYJJX(); break;
case 14:csave[MAX] = new ZX(); break;
case 15:csave[MAX] = new PENQI();break;
}
csave[MAX].B = B;csave[MAX].G = G;csave[MAX].R = R;
csave[MAX].cx = Integer.valueOf(tcx.getText());
csave[MAX].zti = nzt;
csave[MAX].max = Integer.valueOf(tcx.getText())*2;
csave[MAX].time = Integer.valueOf(tcx.getText())*30;
Random random = new Random();
for(int i = 0;i<100;i++)
{
csave[MAX].fx[i] = random.nextInt(csave[MAX].max) - csave[MAX].max;
csave[MAX].fy[i] = random.nextInt(csave[MAX].max) - csave[MAX].max;
}
}
class mousec implements MouseMotionListener,MouseListener {
public void mousePressed(MouseEvent e) {
MAX++;
dosave();
csave[MAX].x1 = csave[MAX].x2 = e.getX();
csave[MAX].y1 = csave[MAX].y2 = e.getY();
System.out.println(e.getX());
if(flag == 3)
{
String input;
input = JOptionPane.showInputDialog(
"");
csave[MAX].isb = isb;
csave[MAX].isi = isi;
csave[MAX].zti = nzt;
csave[MAX].s = input;
csave[MAX].m = MAX;
System.out.println(csave[MAX].x1);
System.out.println(MAX);
repaint();
}
}
public void mouseReleased(MouseEvent e) {
csave[MAX].x2 = e.getX();
csave[MAX].y2 = e.getY();
repaint();
}
public void mouseEntered(MouseEvent e) {
String s = "鼠标已进入窗体";
stata.setText(s); //设置文本框显示鼠标已进入窗体字符串
}
public void mouseExited(MouseEvent e) {
String s = "鼠标已移出窗体";
stata.setText(s);
}
public void mouseDragged(MouseEvent e) {
String s = "鼠标拖动到位置(" + e.getX() + "," + e.getY() + ")"; //取得鼠标坐标
stata.setText(s); //设置文本框显示鼠标拖动坐标
if(flag == 1||flag == 2)
{
MAX++;
dosave();
csave[MAX - 1].x1 = e.getX();
csave[MAX].x2 = csave[MAX].x1 = e.getX();
csave[MAX - 1].y1 = e.getY();
csave[MAX].y2 = csave[MAX].y1 = e.getY();
//System.out.println(MAX);
}
if(flag == 15)
{
MAX++;
dosave();
csave[MAX].x2 = csave[MAX].x1 = e.getX();
csave[MAX].y2 = csave[MAX].y1 = e.getY();
//System.out.println(MAX);
}
csave[MAX].x2 = e.getX();
csave[MAX].y2 = e.getY();
repaint();
}
public void mouseMoved(MouseEvent e) { //鼠标移动方法
String s = "鼠标移动到位置(" + e.getX() + "," + e.getY() + ")"; //取得鼠标坐标
stata.setText(s); //设置文本框显示鼠标拖动坐标
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
repaint();
}
}
private class checkBox implements ItemListener {
public void itemStateChanged(ItemEvent e) {
if (e.getSource() == rb) {
if (e.getStateChange() == ItemEvent.SELECTED) {isb = Font.BOLD;}
else {isb = Font.PLAIN;}
}
if (e.getSource() == ri) {
if (e.getStateChange() == ItemEvent.SELECTED) {isi = Font.ITALIC;}
else {isi = Font.PLAIN;}
}
System.out.println(isb+" "+isi);
}
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MYPAINT();
}
});
}
}
class shap implements Serializable
{
int x1, y1, x2, y2,R=100, G=100, B=100;
float cx; int m = 0;
String zti;
String s;
int isb,isi;
int time,max;
int fx[] = new int[100];int fy[] = new int[100];
void draw(Graphics2D g) {
};
}
class PAN extends shap//画笔
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(cx,BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
g.drawLine(x1, y1, x2, y2);
}
}
class PENQI extends shap//喷漆
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(max/20,BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
for(int i = 0;i<100;i++)
{
double d = (double)fx[i];
double c = (double)fy[i];
g.drawLine((int) (x1+d*Math.sin(d)), (int) (y1+c*Math.sin(c)), (int) (x2+d*Math.sin(d)), (int) (y2+c*Math.sin(c)));
}
}
}
class XPC extends shap//橡皮擦
{
void draw(Graphics2D g) {
g.setColor(new Color(255, 255, 255));
g.setStroke(new BasicStroke(cx + 4,
BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
g.drawLine(x1, y1, x2, y2);
}
}
class TEXT extends shap//文字
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setFont(new Font(zti, isb+isi, ((int) cx) * 20));
if (s != null) {
g.drawString(s, x1, y1);
}
System.out.println(s+","+ x1+","+x2+","+m);
}
}
class ZX extends shap //直线
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(cx, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
g.drawLine(x1, y1, x2, y2);
}
}
class ZFX extends shap//正方形
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(cx));
g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), Math.abs(y1 - y2));
}
}
class SZFX extends shap//实心正方形
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(cx));
g.fillRect(Math.min(x1, x2), Math.min(y1, y2),
Math.abs(x1 - x2), Math.abs(y1 - y2));
}
}
class SJX extends shap//三角形
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(cx));
int x3 = (x1+x2)/2;
g.drawLine(x1, y2, x3, y1);
g.drawLine( x3, y1, x2, y2);
g.drawLine( x1, y2, x2, y2);
}
}
class SSJX extends shap//实心三角形
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(cx));
int x3 = (x1+x2)/2;
g.drawLine(x1, y2, x3, y1);
g.drawLine( x3, y1, x2, y2);
g.drawLine( x1, y2, x2, y2);
}
}
class TY extends shap//椭圆
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(cx));
g.drawOval(Math.min(x1, x2), Math.min(y1, y2),
Math.abs(x1 - x2), Math.abs(y1 - y2));
}
}
class STY extends shap//实心椭圆
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(cx));
g.fillOval(Math.min(x1, x2), Math.min(y1, y2),
Math.abs(x1 - x2), Math.abs(y1 - y2));
}
}
class YX extends shap//圆形
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(cx));
g.drawOval(Math.min(x1, x2), Math.min(y1, y2),
Math.max(Math.abs(x1 - x2), Math.abs(y1 - y2)),
Math.max(Math.abs(x1 - x2), Math.abs(y1 - y2)));
}
}
class SYX extends shap//实心圆形
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(cx));
g.fillOval(Math.min(x1, x2), Math.min(y1, y2),
Math.max(Math.abs(x1 - x2), Math.abs(y1 - y2)),
Math.max(Math.abs(x1 - x2), Math.abs(y1 - y2)));
}
}
class YJJX extends shap//圆角矩形
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(cx));
g.drawRoundRect(Math.min(x1, x2), Math.min(y1, y2),Math.abs(x1 - x2), Math.abs(y1 - y2),50, 35);
}
}
class SYJJX extends shap//实现圆角矩形
{
void draw(Graphics2D g) {
g.setColor(new Color(R, G, B));
g.setStroke(new BasicStroke(cx));
g.fillRoundRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), Math.abs(y1 - y2),50, 35);
}
}
/*无用调试*/
class TESE extends JPanel{
public void paint(Graphics g){
g.drawLine(6,150,50,50);
g.drawLine(6,150,50,150);
g.drawRect(60,30,100,30);
g.draw3DRect(60,160,100,30,true);
g.drawRoundRect(60, 200, 100, 40, 10, 10);
g.drawArc(200,50,10,8,0,45);
g.drawOval(200,150,80,80);
g.drawString("测试绘制文字", 200, 250);
Color c = Color.RED;
g.setColor(c);
g.fillOval(200, 100,100 , 40);
g.setColor(Color.PINK);
g.fill3DRect(60,80,100,30,true);
g.setColor(Color.BLUE);
g.fillArc(200, 200, 100, 80, 0, 45);
Font f = new Font("黑体",Font.ITALIC,60);
g.setFont(f);
g.drawString("欢迎访问",10,300);
}
}
Java画图软件制作相关推荐
- 励志:98岁老爷爷用Windows系统自带画图软件制作的神作
哈尔拉斯科,是一位很出名的老爷爷,他70岁才接触MS Paint(就是我们熟知的Windows自带的画图软件).他曾经是一名图形艺术家,但是之前他都是手工创作.他熟知怎么用双手进行艺术创作.但是后来, ...
- 画图软件Java实现(面向对象程序设计)
画图软件 一.需求 利用面向对象的思想,设计并实现一个画图软件.实现基本的图形绘制功能.文本绘制功能.橡皮檫功能.撤销功能以及图片的存取功能,画图软件具有美观的用户界面.使用户可以绘制直线.曲线.矩形 ...
- Java实现画图软件(Swing)
目标:使用Java中的GUI工具包Swing实现画图软件的创建 UI界面 首先要创建出这样的样子的界面,这就要用到JFrame类,创建一个窗体对象,然后将所有的组件(按钮.画布等)放入窗体对象中. p ...
- Java项目——画图软件
简介 作者简介:青铜码农,和大多数同学一样从零开始一步步学习,一步步积累.期待您的关注,让我们一起成长~注:本人学疏才浅,文章如有错误之处,敬请指正~ 本章节内容简介:仿Windows系统自带的画图工 ...
- 如何使用Python制作画图软件(1)
哈啰,大家好,我是新人创作者:QWQ_chinese . 今天我们来谈一谈,如何在Python中用纯pygame模块制作一个简简单单的画图软件~ 大家看完这篇文章,觉得对自己有好处的,可以点个赞,顺便 ...
- 基于Java的动画制作软件_本科毕业设计
纯Java代码制作的一款操作简单的制作小型动画的软件,让任何人在经过简单的操作学习后就能制作出自己的作品. 演示视频已上传到b站:https://www.bilibili.com/video/BV1p ...
- java robot机器人控制电脑画图软件实现画个圆圈demo
前期准备 上一篇文章<java robot机器人控制windows打开浏览器,访问指定网址> 打开电脑画图软件,以window自带的画图软件为例,打开后点击最大化. java代码示例,放在 ...
- java大作业画图软件,模仿微软Paint、PowerPoint(含报告、只因你太美动画)
画图软件 含报告.附送java文档.只因你太美动画(donghua49.txt) 特色动画功能b站演示地址https://www.bilibili.com/video/BV1iv4y1v7gx/?vd ...
- java 画图 怎么清除已经画出来的图形_ppt小技巧——用paint3d画3d演示内容
但不得不承认,三维软件出来的设计作品效果真的很棒, 相比于我们日常使用的软件,三维软件的学习门槛真的难太多了...... 要是有一款上手简单,效果逆天的软件就好了. 随后微软便发布了这么一款产品--p ...
最新文章
- Jackson、FastJson快速入门(整合SpringMVC)
- effective c++
- python之父-Python之父宣布退休,但Python仍在吞噬世界
- Linux 初步笔记
- android 刷新view位置,Android View刷新机制实例分析
- 第二天一早的飞鸽传书
- Android9编程一:安装开发环境
- webworker应用场景_初始WebWorker
- 关于使用,NI采集卡+labview信号采集,问题交流【第二贴】
- JS中return SomeFunction和不加return的区别
- 高中生入门计算机编程,高中生必看:入门学软件编程,看这三点...
- 如何用Python批量获取生意参谋商品来源信息
- 计算机应用专业毕业设计模板,计算机应用毕业论文模板范文
- 微信公众号授权登录配置
- ARM920T(S3C2440)的中断系统
- 密码应用安全性评估实施要点之三密钥管理要求与实现要点
- hacker 入门指南
- tree traversal (树的遍历) - inorder traversal (中序遍历)
- 期货反向跟单--有趣儿的差异化
- python解椭圆方程的例题_如何求椭圆方程
热门文章
- 程序员白天犯困无精神
- 域名交易平台快名网即将关站,有域名的朋友抓紧时间转出!
- 二叉树的顺序存储结构------(C语言实现)
- 安装VMware15提示重启电脑,重启后又还是提示重启电脑
- burpsuite模块详解
- KnowHowChain(脑海链)进度报告——9月15日-9月30日
- 编程判断输入的字符串是否是回文串。其中判断字符串是否为回文串要用函数实现。
- 图像复原 --- Restormer
- android 原生分享界面_Android 很好用的「桌面启动器」更新大版本,变得更易上手了...
- 2.5.3 HTML5布局的使用