很值得学习的java 画图板源码下载地址:http://download.csdn.net/source/2371150

package minidrawpad; import java.awt.*; import java.awt.event.*; import java.io.InputStreamReader; import java.io.Reader; import javax.swing.*; // 主界面类 public class DrawPad extends JFrame implements ActionListener { /** * @param FileName DrawPad * @author Liu Jun Guang s * @param V 1.0.0 */ private static final long serialVersionUID = -2551980583852173918L; private JToolBar buttonpanel;//定义按钮面板 private JMenuBar bar ;//定义菜单栏 private JMenu file,color,stroke,help;//定义菜单 private JMenuItem newfile,openfile,savefile,exit;//file 菜单中的菜单项 private JMenuItem helpin,helpmain,colorchoice,strokeitem;//help 菜单中的菜单项 private Icon nf,sf,of;//文件菜单项的图标对象 private JLabel startbar;//状态栏 private DrawArea drawarea;//画布类的定义 private Help helpobject; //定义一个帮助类对象 private FileClass fileclass ;//文件对象 String[] fontName; //定义工具栏图标的名称 private String names[] = {"newfile","openfile","savefile","pen","line" ,"rect","frect","oval","foval","circle","fcircle" ,"roundrect","froundrect","rubber","color" ,"stroke","word"};//定义工具栏图标的名称 private Icon icons[];//定义图象数组 private String tiptext[] = {//这里是鼠标移到对应的button上给出对应的提示 "新建一个图片","打开图片","保存图片","随笔画","画直线" ,"画空心的矩形","填充矩形","画空心的椭圆","填充椭圆" ,"画空心的圆","填充圆","画圆角矩形","填充圆角矩形" ,"橡皮擦","颜色","选择线条的粗细","文字的输入"}; JButton button[];//定义工具条中的按钮组 private JCheckBox bold,italic;//工具条字体的风格(复选框) private JComboBox stytles ;//工具条中的字体的样式(下拉列表) public DrawPad(String string) { // TODO 主界面的构造函数 super(string); //菜单的初始化 file = new JMenu("文件"); color = new JMenu("颜色"); stroke = new JMenu("画笔"); help = new JMenu("帮助"); bar = new JMenuBar();//菜单栏的初始化 //菜单栏加入菜单 bar.add(file); bar.add(color); bar.add(stroke); bar.add(help); //界面中加入菜单栏 setJMenuBar(bar); //菜单中加入快捷键 file.setMnemonic('F');//既是ALT+“F” color.setMnemonic('C');//既是ALT+“C” stroke.setMnemonic('S');//既是ALT+“S” help.setMnemonic('H');//既是ALT+“H” //File 菜单项的初始化 try { Reader reader = new InputStreamReader(getClass().getResourceAsStream("/icon"));//读取文件以类路径为基准 } catch (Exception e) { // TODO 文件读取错误 JOptionPane.showMessageDialog(this,"图片读取错误!","错误",JOptionPane.ERROR_MESSAGE); } nf = new ImageIcon(getClass().getResource("/icon/newfile.jpg"));//创建图表 sf = new ImageIcon(getClass().getResource("/icon/savefile.jpg")); of = new ImageIcon(getClass().getResource("/icon/openfile.jpg")); newfile = new JMenuItem("新建",nf); openfile = new JMenuItem("打开",of ); savefile = new JMenuItem("保存",sf); exit = new JMenuItem("退出"); //File 菜单中加入菜单项 file.add(newfile); file.add(openfile); file.add(savefile); file.add(exit); //File 菜单项加入快捷键 newfile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); openfile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK)); savefile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK)); //File 菜单项的注冊监听 newfile.addActionListener(this); openfile.addActionListener(this); savefile.addActionListener(this); exit.addActionListener(this); //Color 菜单项的初始化 colorchoice = new JMenuItem("调色板"); colorchoice.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); colorchoice.addActionListener(this); color.add(colorchoice); //Help 菜单项的初始化 helpmain = new JMenuItem("帮助主题"); helpin = new JMenuItem("关于小小画图板"); //Help 菜单中加入菜单项 help.add(helpmain); help.addSeparator();//加入切割线 help.add(helpin); //Help 菜单项的注冊监听 helpin.addActionListener(this); helpmain.addActionListener(this); //Stroke 菜单项的初始化 strokeitem = new JMenuItem("设置画笔"); strokeitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK)); stroke.add(strokeitem); strokeitem.addActionListener(this); //工具栏的初始化 buttonpanel = new JToolBar( JToolBar.HORIZONTAL); icons = new ImageIcon[names.length]; button = new JButton[names.length]; for(int i = 0 ;i<names.length;i++) { icons[i] = new ImageIcon(getClass().getResource("/icon/"+names[i]+".jpg"));//获得图片(以类路径为基准) button[i] = new JButton("",icons[i]);//创建工具条中的按钮 button[i].setToolTipText(tiptext[i]);//这里是鼠标移到对应的按钮上给出对应的提示 buttonpanel.add(button[i]); button[i].setBackground(Color.red); if(i<3)button[i].addActionListener(this); else if(i<=16) button[i].addActionListener(this); } CheckBoxHandler CHandler = new CheckBoxHandler();//字体样式处理类 bold = new JCheckBox("粗体"); bold.setFont(new Font(Font.DIALOG,Font.BOLD,30));//设置字体 bold.addItemListener(CHandler);//bold注冊监听 italic = new JCheckBox("斜体"); italic.addItemListener(CHandler);//italic注冊监听 italic.setFont(new Font(Font.DIALOG,Font.ITALIC,30));//设置字体 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();//计算机上字体可用的名称 fontName = ge.getAvailableFontFamilyNames(); stytles = new JComboBox(fontName);//下拉列表的初始化 stytles.addItemListener(CHandler);//stytles注冊监听 stytles.setMaximumSize(new Dimension(400,50));//设置下拉列表的最大尺寸 stytles.setMinimumSize(new Dimension(250,40)); stytles.setFont(new Font(Font.DIALOG,Font.BOLD,20));//设置字体 //工具栏中加入字体式样 buttonpanel.add(bold); buttonpanel.add(italic); buttonpanel.add(stytles); //状态栏的初始化 startbar = new JLabel("我的小小画图板"); //绘画区的初始化 drawarea = new DrawArea(this); helpobject = new Help(this); fileclass = new FileClass(this,drawarea); Container con = getContentPane();//得到内容面板 con.add(buttonpanel, BorderLayout.NORTH); con.add(drawarea,BorderLayout.CENTER); con.add(startbar,BorderLayout.SOUTH); Toolkit tool = getToolkit();//得到一个Tolkit类的对象(主要用于得到屏幕的大小) Dimension dim = tool.getScreenSize();//得到屏幕的大小 (返回Dimension对象) setBounds(40,40,dim.width-70,dim.height-100); setVisible(true); validate(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //设置状态栏显示的字符 public void setStratBar(String s) { startbar.setText(s); } public void actionPerformed(ActionEvent e) { // TODO 事件的处理 for(int i = 3; i<=13;i++) { if(e.getSource() ==button[i]) { drawarea.setCurrentChoice(i); drawarea.createNewitem(); drawarea.repaint(); } } if(e.getSource() == newfile||e.getSource() == button[0])//新建 {fileclass.newFile();} else if(e.getSource() == openfile||e.getSource() == button[1])//打开 {fileclass.openFile();} else if(e.getSource() == savefile||e.getSource() == button[2])//保存 {fileclass.saveFile();} else if(e.getSource() == exit)//退出程序 {System.exit(0);} else if(e.getSource() == colorchoice||e.getSource() == button[14])//弹出颜色对话框 { drawarea.chooseColor();//颜色的选择 } else if(e.getSource() == button[15]||e.getSource()==strokeitem)//画笔粗细 { drawarea.setStroke();//画笔粗细的调整 } else if(e.getSource() == button[16])//加入文字 { JOptionPane.showMessageDialog(null, "请单击画板以确定输入文字的位置!","提示" ,JOptionPane.INFORMATION_MESSAGE); drawarea.setCurrentChoice(14); drawarea.createNewitem(); drawarea.repaint(); } else if(e.getSource() == helpin)//帮助信息 {helpobject.AboutBook();} else if(e.getSource() == helpmain)//帮助主题 {helpobject.MainHeip();} } //字体样式处理类(粗体、斜体、字体名称) public class CheckBoxHandler implements ItemListener { public void itemStateChanged(ItemEvent ie) { // TODO 字体样式处理类(粗体、斜体、字体名称) if(ie.getSource() == bold)//字体粗体 { if(ie.getStateChange() == ItemEvent.SELECTED) drawarea.setFont(1, Font.BOLD); else drawarea.setFont(1, Font.PLAIN); } else if(ie.getSource() == italic)//字体斜体 { if(ie.getStateChange() == ItemEvent.SELECTED) drawarea.setFont(2, Font.ITALIC); else drawarea.setFont(2, Font.PLAIN); } else if(ie.getSource() == stytles)//字体的名称 { drawarea.stytle = fontName[stytles.getSelectedIndex()]; } } } }

java 画图板源码下载地址:http://download.csdn.net/source/2371150

package minidrawpad; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.event.MouseMotionAdapter; //画图区类(各种图形的绘制和鼠标事件) public class DrawArea extends JPanel{ DrawPad drawpad =null; Drawing[] itemList =new Drawing[5000];; //绘制图形类 private int currentChoice = 3;//设置默认基本图形状态为随笔画 int index = 0;//当前已经绘制的图形数目 private Color color = Color.black;//当前画笔的颜色 int R,G,B;//用来存放当前颜色的彩值 int f1,f2;//用来存放当前字体的风格 String stytle ;//存放当前字体 float stroke = 1.0f;//设置画笔的粗细 ,默认的是 1.0 DrawArea(DrawPad dp) { drawpad = dp; // 把鼠标设置成十字形 setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); // setCursor 设置鼠标的形状 ,getPredefinedCursor()返回一个具有指定类型的光标的对象 setBackground(Color.white);// 设置绘制区的背景是白色 addMouseListener(new MouseA());// 加入鼠标事件 addMouseMotionListener(new MouseB()); createNewitem(); } public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2d = (Graphics2D)g;//定义随笔画 int j = 0; while(j<=index) { draw(g2d,itemList[j]); j++; } } void draw(Graphics2D g2d , Drawing i) { i.draw(g2d);//将画笔传到个各类的子类中,用来完毕各自的画图 } //新建一个图形的基本单元对象的程序段 void createNewitem(){ if(currentChoice == 14)//字体的输入光标对应的设置为文本输入格式 setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); else setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); switch(currentChoice){ case 3: itemList[index] = new Pencil();break; case 4: itemList[index] = new Line();break; case 5: itemList[index] = new Rect();break; case 6: itemList[index] = new fillRect();break; case 7: itemList[index] = new Oval();break; case 8: itemList[index] = new fillOval();break; case 9: itemList[index] = new Circle();break; case 10: itemList[index] = new fillCircle();break; case 11: itemList[index] = new RoundRect();break; case 12: itemList[index] = new fillRoundRect();break; case 13: itemList[index] = new Rubber();break; case 14: itemList[index] = new Word();break; } itemList[index].type = currentChoice; itemList[index].R = R; itemList[index].G = G; itemList[index].B = B; itemList[index].stroke = stroke ; } public void setIndex(int x){//设置index的接口 index = x; } public int getIndex(){//设置index的接口 return index ; } public void setColor(Color color)//设置颜色的值 { this.color = color; } public void setStroke(float f)//设置画笔粗细的接口 { stroke = f; } public void chooseColor()//选择当前颜色 { color = JColorChooser.showDialog(drawpad, "请选择颜色", color); try { R = color.getRed(); G = color.getGreen(); B = color.getBlue(); } catch (Exception e) { R = 0; G = 0; B = 0; } itemList[index].R = R; itemList[index].G = G; itemList[index].B = B; } public void setStroke()//画笔粗细的调整 { String input ; input = JOptionPane.showInputDialog("请输入画笔的粗细( >0 )"); try { stroke = Float.parseFloat(input); } catch (Exception e) { stroke = 1.0f; }itemList[index].stroke = stroke; } public void setCurrentChoice(int i )//文字的输入 { currentChoice = i; } public void setFont(int i,int font)//设置字体 { if(i == 1) { f1 = font; } else f2 = font; } // TODO 鼠标事件MouseA类继承了MouseAdapter //用来完毕鼠标的响应事件的操作(鼠标的按下、释放、单击、移动、拖动、何时进入一个组件、何时退出、何时滚动鼠标滚轮 ) class MouseA extends MouseAdapter { @Override public void mouseEntered(MouseEvent me) { // TODO 鼠标进入 drawpad.setStratBar("鼠标进入在:["+me.getX()+" ,"+me.getY()+"]"); } @Override public void mouseExited(MouseEvent me) { // TODO 鼠标退出 drawpad.setStratBar("鼠标退出在:["+me.getX()+" ,"+me.getY()+"]"); } @Override public void mousePressed(MouseEvent me) { // TODO 鼠标按下 drawpad.setStratBar("鼠标按下在:["+me.getX()+" ,"+me.getY()+"]");//设置状态栏提示 itemList[index].x1 = itemList[index].x2 = me.getX(); itemList[index].y1 = itemList[index].y2 = me.getY(); //假设当前选择为随笔画或橡皮擦 ,则进行以下的操作 if(currentChoice == 3||currentChoice ==13){ itemList[index].x1 = itemList[index].x2 = me.getX(); itemList[index].y1 = itemList[index].y2 = me.getY(); index++; createNewitem();//创建新的图形的基本单元对象 } //假设选择图形的文字输入,则进行以下的操作 if(currentChoice == 14){ itemList[index].x1 = me.getX(); itemList[index].y1 = me.getY(); String input ; input = JOptionPane.showInputDialog("请输入你要写入的文字!"); itemList[index].s1 = input; itemList[index].x2 = f1; itemList[index].y2 = f2; itemList[index].s2 = stytle; index++; currentChoice = 14; createNewitem();//创建新的图形的基本单元对象 repaint(); } } @Override public void mouseReleased(MouseEvent me) { // TODO 鼠标松开 drawpad.setStratBar("鼠标松开在:["+me.getX()+" ,"+me.getY()+"]"); if(currentChoice == 3||currentChoice ==13){ itemList[index].x1 = me.getX(); itemList[index].y1 = me.getY(); } itemList[index].x2 = me.getX(); itemList[index].y2 = me.getY(); repaint(); index++; createNewitem();//创建新的图形的基本单元对象 } } // 鼠标事件MouseB继承了MouseMotionAdapter // 用来处理鼠标的滚动与拖动 class MouseB extends MouseMotionAdapter { public void mouseDragged(MouseEvent me)//鼠标的拖动 { drawpad.setStratBar("鼠标拖动在:["+me.getX()+" ,"+me.getY()+"]"); if(currentChoice == 3||currentChoice ==13){ itemList[index-1].x1 = itemList[index].x2 = itemList[index].x1 =me.getX(); itemList[index-1].y1 = itemList[index].y2 = itemList[index].y1 = me.getY(); index++; createNewitem();//创建新的图形的基本单元对象 } else { itemList[index].x2 = me.getX(); itemList[index].y2 = me.getY(); } repaint(); } public void mouseMoved(MouseEvent me)//鼠标的移动 { drawpad.setStratBar("鼠标移动在:["+me.getX()+" ,"+me.getY()+"]"); } } }

package minidrawpad; import javax.swing.UIManager; //主函数类 public class MiniDrawPad { /** * @param FileName DrawPad * @author Liu Jun Guang * @param V 1.0.0 */ public static void main(String[] args) { // TODO 主函数 /*try {//将界面设置为当前windows界面风格 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) {}*/ DrawPad drawpad = new DrawPad("小小画图板"); } }

java 画图板源码下载地址:http://download.csdn.net/source/2371150

package minidrawpad; import java.awt.Color; import java.io.*; import javax.swing.*; import javax.swing.filechooser.*; //文件类 (文件的打开、新建、保存) public class FileClass { private DrawPad drawpad; DrawArea drawarea = null; FileClass(DrawPad dp,DrawArea da) { drawpad = dp; drawarea = da; } public void newFile() { // TODO 新建图像 drawarea.setIndex(0); drawarea.setCurrentChoice(3);//设置默觉得随笔画 drawarea.setColor(Color.black);//设置颜色 drawarea.setStroke(1.0f);//设置画笔的粗细 drawarea.createNewitem(); drawarea.repaint(); } public void openFile() { // TODO 打开图像 //JFileChooser 为用户选择文件提供了一种简单的机制 JFileChooser filechooser = new JFileChooser(); filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY); /* FileNameExtensionFilter filter = new FileNameExtensionFilter( "JPG & GIF Images", "jpg", "gif");//当中仅仅显示 .jpg 和 .gif 图像 filechooser.setFileFilter(filter);*/ int returnVal = filechooser.showOpenDialog(drawpad); if(returnVal == JFileChooser.CANCEL_OPTION) {//假设单击确定button就运行以下得程序 return; } File fileName = filechooser.getSelectedFile();//getSelectedFile()返回选中的文件 fileName.canRead(); if(fileName == null || fileName.getName().equals(""))//文件名称不存在时 { JOptionPane.showMessageDialog(filechooser,"文件名称","请输入文件名称!",JOptionPane.ERROR_MESSAGE); } else { try { FileInputStream ifs = new FileInputStream(fileName); ObjectInputStream input = new ObjectInputStream(ifs); int countNumber = 0; Drawing inputRecord; countNumber = input.readInt(); for(int i =0;i<=countNumber;i++) { drawarea.setIndex(i); inputRecord = (Drawing)input.readObject(); drawarea.itemList[i] = inputRecord; } drawarea.createNewitem(); input.close(); drawarea.repaint(); } catch (FileNotFoundException e) { JOptionPane.showMessageDialog(drawpad,"没有找到源文件!","没有找到源文件",JOptionPane.ERROR_MESSAGE); } catch (IOException e) { JOptionPane.showMessageDialog(drawpad,"读文件是错误发生!","读取错误",JOptionPane.ERROR_MESSAGE); } catch (ClassNotFoundException e) { JOptionPane.showMessageDialog(drawpad,"不能创建对象!","已到文件末尾",JOptionPane.ERROR_MESSAGE); } } } //保存图像文件程序段,用到文件对(FileOupputSream)象流 public void saveFile() { // TODO 保存图像 //JFileChooser 为用户选择文件提供了一种简单的机制 JFileChooser filechooser = new JFileChooser(); filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY); //setFileSelectionMode()设置 JFileChooser,以同意用户仅仅选择文件、仅仅选择文件夹,或者可选择文件和文件夹。 int result = filechooser.showSaveDialog(drawpad); if(result == JFileChooser.CANCEL_OPTION){ return ; } File fileName = filechooser.getSelectedFile();//getSelectedFile()返回选中的文件 fileName.canWrite();//測试应用程序能否够改动此抽象路径名表示的文件 if(fileName == null || fileName.getName().equals(""))//文件名称不存在时 { JOptionPane.showMessageDialog(filechooser,"文件名称","请输入文件名称!",JOptionPane.ERROR_MESSAGE); } else { try { fileName.delete();//删除此抽象路径名表示的文件或文件夹 FileOutputStream fos = new FileOutputStream(fileName+".xxh");//文件输出流以字节的方式输出 //对象输出流 ObjectOutputStream output = new ObjectOutputStream(fos); //Drawing record; output.writeInt(drawarea.getIndex()); for(int i = 0;i<=drawarea.getIndex() ;i++) { Drawing p = drawarea.itemList[i]; output.writeObject(p); output.flush();//刷新该流的缓冲。此操作将写入全部已缓冲的输出字节,并将它们刷新究竟层流中。 //将全部的图形信息强制的转换成父类线性化存储到文件里 } output.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } } }

package minidrawpad; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.io.Serializable; //图形绘制类 用于绘制各种图形 //父类,基本图形单元,用到串行的接口,保存使用到 //公共的属性放到超类中,子类能够避免反复定义 /*类通过实现 java.io.Serializable 接口以启用其序列化功能。 未实现此接口的类将无法使其不论什么状态序列化或反序列化。 可序列化类的全部子类型本身都是可序列化的。序列化接口没有方法或字段, 仅用于标识可序列化的语义。*/ public class Drawing implements Serializable { int x1,x2,y1,y2; //定义坐标属性 int R,G,B; //定义色彩属性 float stroke ; //定义线条粗细的属性 int type; //定义字体属性 String s1; //定义字体的风格 String s2; //定义字体的风格 void draw(Graphics2D g2d ){}//定义画图函数 } class Line extends Drawing//直线类 { void draw(Graphics2D g2d) { g2d.setPaint(new Color(R, G, B));// 为 Graphics2D 上下文设置 Paint 属性。 // 使用为 null 的 Paint 对象调用此方法对此 Graphics2D 的当前 Paint 属性没有不论什么影响。 g2d.setStroke(new BasicStroke(stroke, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL)); // setStroke(Stroke s)为 Graphics2D 上下文设置 Stroke // BasicStroke 类定义针对图形图元轮廓呈现属性的一个基本集合 // BasicStroke.CAP_ROUND使用半径等于画笔宽度一半的圆形装饰结束未封闭的子路径和虚线线段 // BasicStroke.JOIN_BEVEL通过直线连接宽体轮廓的外角,将路径线段连接在一起。 g2d.drawLine(x1, y1, x2, y2);// 画直线 } } class Rect extends Drawing{//矩形类 void draw(Graphics2D g2d ){ g2d.setPaint(new Color(R,G,B)); g2d.setStroke(new BasicStroke(stroke)); g2d.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1-x2), Math.abs(y1-y2)); } } class fillRect extends Drawing{//实心矩形类 void draw(Graphics2D g2d ){ g2d.setPaint(new Color(R,G,B)); g2d.setStroke(new BasicStroke(stroke)); g2d.fillRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1-x2), Math.abs(y1-y2)); } } class Oval extends Drawing{//椭圆类 void draw(Graphics2D g2d ){ g2d.setPaint(new Color(R,G,B)); g2d.setStroke(new BasicStroke(stroke)); g2d.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1-x2), Math.abs(y1-y2)); } } class fillOval extends Drawing{//实心椭圆类 void draw(Graphics2D g2d ){ g2d.setPaint(new Color(R,G,B)); g2d.setStroke(new BasicStroke(stroke)); g2d.fillOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1-x2), Math.abs(y1-y2)); } } class Circle extends Drawing{//圆类 void draw(Graphics2D g2d ){ g2d.setPaint(new Color(R,G,B)); g2d.setStroke(new BasicStroke(stroke)); g2d.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 fillCircle extends Drawing{//实心圆类 void draw(Graphics2D g2d ){ g2d.setPaint(new Color(R,G,B)); g2d.setStroke(new BasicStroke(stroke)); g2d.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 RoundRect extends Drawing{//圆角矩形类 void draw(Graphics2D g2d ){ g2d.setPaint(new Color(R,G,B)); g2d.setStroke(new BasicStroke(stroke)); g2d.drawRoundRect(Math.min(x1, x2), Math.min(y1, y2),Math.abs(x1-x2), Math.abs(y1-y2),50,35); } } class fillRoundRect extends Drawing{//实心圆角矩形类 void draw(Graphics2D g2d ){ g2d.setPaint(new Color(R,G,B)); g2d.setStroke(new BasicStroke(stroke)); g2d.fillRoundRect(Math.min(x1, x2), Math.min(y1, y2),Math.abs(x1-x2), Math.abs(y1-y2),50,35); } } class Pencil extends Drawing{//随笔画类 void draw(Graphics2D g2d ){ g2d.setPaint(new Color(R,G,B)); g2d.setStroke(new BasicStroke(stroke,BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL)); g2d.drawLine(x1, y1,x2, y2); } } class Rubber extends Drawing{//橡皮擦类 void draw(Graphics2D g2d ){ g2d.setPaint(new Color(255,255,255));//白色 g2d.setStroke(new BasicStroke(stroke+4,BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL)); g2d.drawLine(x1, y1,x2, y2); } } class Word extends Drawing{//输入文字类 void draw(Graphics2D g2d ){ g2d.setPaint(new Color(R,G,B)); g2d.setFont(new Font(s2,x2+y2,((int)stroke)*18));//设置字体 if(s1 != null) g2d.drawString( s1, x1,y1); } }

java 画图板源码下载地址:http://download.csdn.net/source/2371150

package minidrawpad; import javax.swing.JFrame; import javax.swing.JOptionPane; //帮助菜单功能的事项类 public class Help extends JFrame { private DrawPad drawpad = null; Help(DrawPad dp) { drawpad = dp; } public void MainHeip() { JOptionPane.showMessageDialog(this,"小小画图板帮助文档!","小小画图板",JOptionPane.WARNING_MESSAGE); } public void AboutBook() { JOptionPane.showMessageDialog(drawpad,"小小画图板"+"/n"+" 版本号: 1.1.2"+"/n" +" 作者: 刘 军 光"+"/n" +" 时间: 2009/12/13","小小画图板",JOptionPane.WARNING_MESSAGE); } }


用到的各种图片  请将图片放在icon目录下

java 画图板源码下载地址:http://download.csdn.net/source/2371150

circle.jpg color.jpgfcircle.jpgfoval.jpgfrect.jpgfroundrect.jpgline.jpgnewfile.jpgopenfile.jpgoval.jpgpen.jpgrect.jpgroundrect.jpgrubber.jpgsavefile.jpgstroke.jpgword.jpg

转载于:https://www.cnblogs.com/mfrbuaa/p/3777348.html

很值得学习的java 画图板源码相关推荐

  1. GitHub 上 1.3k Star 的 strman-java 项目有值得学习的地方吗?源码视觉来分析一波

    大家好,我是沉默王二. 很多初学编程的同学,经常给我吐槽,说:"二哥,你在敲代码的时候会不会有这样一种感觉,写着写着看不下去了,觉得自己写出来的代码就好像屎一样?" 这里我必须得说 ...

  2. html5效果源码,10款web前端值得学习的 HTML5 效果附源码

    1.jQuery右侧Tab选项卡的焦点图插件 这是一款基于jQuery的焦点图插件,和之前介绍的jQuery焦点图插件类似,它以淡入淡出的动画方式来切换图片,该焦点图插件的特点是右侧有一排Tab选项卡 ...

  3. java画图板之平面山水画(一)

    前期准备 在上次的博客中,我们已经用java了解并制作了画图板,可以在上面添加绘制椭圆.曲线.填充.改变颜色等功能,在之后的版本中会进行修改.     今天要做的是通过递归的方式绘制山脉. 具体步骤 ...

  4. Java并发包源码学习之AQS框架(三)LockSupport和interrupt

    接着上一篇文章今天我们来介绍下LockSupport和Java中线程的中断(interrupt). 其实除了LockSupport,Java之初就有Object对象的wait和notify方法可以实现 ...

  5. 绘画板 java_非常值得学习的java 绘图板源代码

    Java 小小绘图板,各种图形的绘制和文字的写入,也可以调整文字画笔的粗细 .还可以保存图像,非常值得学习的java 绘图板源代码下载地址: 具体下载目录在 /pub/2011/11/05/java ...

  6. java画图板之平面山水画(二)

    java画图板之平面山水画(一):https://blog.csdn.net/qq_43348021/article/details/104346805 上次的博客中已经将山脉的轮廓画出来了,这次我们 ...

  7. Java并发包源码学习系列:同步组件CountDownLatch源码解析

    文章目录 CountDownLatch概述 使用案例与基本思路 类图与基本结构 void await() boolean await(long timeout, TimeUnit unit) void ...

  8. 深圳Java学习:怎么阅读spring源码?

    深圳Java学习:怎么阅读spring源码? 此问必是有心人,有心人必有心答. --题记 当我看到这个问题的时候,不禁心里一问,为何要阅读spring源码? 在我们的生活之中,有形形色色的万物(Obj ...

  9. JAVA小项目实例源码—学习娱乐小助手

    代码地址如下: http://www.demodashi.com/demo/11456.html 一.程序实现 项目目录: MyJFrame:实现项目界面样式: AppProcess:实现调用api或 ...

  10. java gef_GefExample GEF的例子,用于eclipse 学习,非常好的源码材料。 Java Develop 238万源代码下载- www.pudn.com...

    文件名称: GefExample下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 127 KB 上传时间: 2014-07-10 下载次数: 0 提 供 者: la ...

最新文章

  1. 简单介绍实体类或对象序列化时,忽略为空属性的操作
  2. 利用Servlet实现用户永久登录
  3. Python单元测试之unittest
  4. java fly bird小游戏_java swing实现的小游戏flybird源码附带视频配置修改教程
  5. docker 镜像 增删改查
  6. 任意门怎么用团发_任意门日淘app官方手机版-任意门日淘安卓版下载v1.4.6-壹六下载...
  7. slickedit自定义代码片段
  8. PROFINET 模拟器使用教程
  9. html注册手机号验证,js正则表达式验证手机号码,用户名和邮箱
  10. 流程图软件Visio的使用笔记
  11. PHP 将XML转成数组(微信回调接收方法)
  12. c语言入门自学mobi,算法精解:C语言描述[AZW3][EPUB][MOBI][23.00MB]
  13. window 2003 配置FTP +防火墙设置
  14. Lambda和Stream流
  15. Android adb的使用
  16. 国内优秀的IC设计公司主要分布在哪些城市?
  17. 苹果屏蔽更新描述文件_屏蔽描述文件失效!iOS13屏蔽系统更新方法推荐
  18. 安装TOPAS RTion extension, 出现的问题及解决方法
  19. php应用于哪些地方,php的应用范围
  20. Cewl命令学习Hydra学习---Hydra windows破解实战各个协议演示

热门文章

  1. Android中sendMessageAtTime()的用法
  2. 气是能量的宏观运行的现象描述
  3. NV12剪切区域时的对齐代码
  4. C# 获取结构体长度 指针转结构体 指针转结构体数组
  5. c语言程序游戏例子,C语言游戏编写例子.doc
  6. 计算机硬件小游戏,小学信息技术第一册《认识计算机——计算机的硬件组成》教案...
  7. matlab中TCR触发,TCR+FC型SVC的研究及MATLAB仿真
  8. dxf geojson 转换_如何将Shapefile(Shp)文件转换为AutoCAD(Dwg、Dxf)文件?
  9. Redis存储揭秘(翻译)
  10. js拦截全局ajax请求