- 浏览: 27482 次
- 性别:
- 来自: 长沙
最新评论
-
endual:
可以采用ajax方式,把体验做的好点。
JavaBean创建和使用:计算器 -
qq_24665727:
顶一个
画图板小结 -
leaf-stop:
BS_YG 写道就用你的注册了,0.0,我这不是搞事吗,电子邮 ...
在HTML中使用正则表达式规范输入数据 -
BS_YG:
就用你的注册了,0.0,我这不是搞事吗,电子邮箱正则表达式有点 ...
在HTML中使用正则表达式规范输入数据 -
然并卵-277:
写的真好!
计算机网络中IP/ICMP协议分析实验
写的第一个有实用性的程序——简易画图板,已经完成了部分按钮的功能(橡皮擦、铅笔、刷子、喷枪、直线、矩形、多边形、椭圆、圆角矩形),颜色的选取,鼠标左右键可以任意切换颜色,还有菜单栏。
下面是一些相关代码:
但是还有一些按钮的功能没有实现:虚线五角星,虚线矩形,油漆,取色器,放大镜,写字,以及曲线;菜单栏按钮的功能没有实现;还有将画图板放大后,图像会消失,这个也没有解决。以后将会慢慢把它补充完整。
附上完整代码(求改进):
下面是一些相关代码:
//******************左边面板添加形状选择工具**************// //添加图片及按钮 ButtonGroup group =new ButtonGroup(); String[] strs ={ "0", "1", "easer", "3", "4", "5", "pencial", "brush", "spray", "9", "line", "11", "rect", "polygon", "oval", "roundrect"}; for(int i=0;i<16;i++){ JRadioButton btn1 =new JRadioButton(); left.add(btn1); group.add(btn1); btn1.setActionCommand(strs[i]); btn1.setSelected(true); ImageIcon defaultIcon = new ImageIcon("img/draw"+i+".jpg"); btn1.setIcon(defaultIcon); ImageIcon rolloverIcon =new ImageIcon("img/draw"+i+"-1.jpg"); btn1.setRolloverIcon(rolloverIcon); ImageIcon pressedIcon = new ImageIcon("img/draw"+i+"-2.jpg"); btn1.setPressedIcon(pressedIcon); ImageIcon selectedIcon =new ImageIcon("img/draw"+i+"-3.jpg"); btn1.setSelectedIcon(selectedIcon); }
//******************中间面板添加****************// JPanel drawpJPanel=new JPanel(); Dimension drawDim=new Dimension(400,300); drawpJPanel.setPreferredSize(drawDim); drawpJPanel.setBackground(Color.WHITE); FlowLayout f1=new FlowLayout(FlowLayout.LEFT); center.setLayout(f1); center.add(drawpJPanel);
//*******************底部面板添加颜色选择工具******// JLabel frontLabel =new JLabel(); JLabel backLabel=new JLabel(); foot.setLayout(null); frontLabel.setBounds(50, 20, 40, 60); backLabel.setBounds(110, 20, 40, 60); frontLabel.setBackground(Color.BLACK); backLabel.setBackground(Color.BLUE); frontLabel.setOpaque(true); backLabel.setOpaque(true); foot.add(frontLabel); foot.add(backLabel); //颜色 Color[] cs={Color.BLACK, Color.GRAY, new Color(128, 0, 0),Color.RED, new Color(255, 128, 0), Color.YELLOW, Color.GREEN, new Color(0, 128, 255), Color.BLUE, Color.MAGENTA, new Color(255,128,128), new Color(128, 0, 125), new Color(128, 255, 0), new Color(128, 0, 255), new Color(0, 128, 120),new Color(128, 0, 20), new Color(128, 128, 0), new Color(100, 128, 255), new Color(128, 30, 50), new Color(128, 110, 50)}; ColorListener mlis =new ColorListener(frontLabel,backLabel); for(int i=0;i<20;i++){ JLabel colorLabel= new JLabel(); colorLabel.addMouseListener(mlis); if(i<10){ colorLabel.setBounds(160+30*i, 20, 25, 25); }else{ colorLabel.setBounds(160+30*(i-10), 50, 25, 25); } colorLabel.setBackground(cs[i]); colorLabel.setOpaque(true); foot.add(colorLabel); } //添加监听器 DrawListener dlis = new DrawListener(drawpJPanel,group,frontLabel,backLabel); drawpJPanel.addMouseListener(dlis); drawpJPanel.addMouseMotionListener(dlis);
//添加菜单栏 private static JMenuBar craeteMenu() { JMenuBar jmb=new JMenuBar(); String[] array={"文件","颜色","编辑","图像","帮助"}; String[][] array2={{"新建", "保存", "打开", "退出"},{"编辑颜色"},{"字体"},{"修改"},{"关于画图"}}; for(int i=0;i<array.length;i++){ JMenu jmenu=new JMenu(array[i]); jmb.add(jmenu); for(int j=0;j<array2[i].length;j++){ JMenuItem jmt=new JMenuItem(array2[i][j]); jmenu.add(jmt); } } return jmb; }
//直线、矩形、椭圆、圆角矩形、多边形的绘制 public void mouseReleased(MouseEvent e){ x2=e.getX(); y2=e.getY(); int x=x1<x2?x1:x2 ; int y=y1<y2?y1:y2 ; int width= x1<x2?x2-x1:x1-x2; int height=y1<y2?y2-y1:y1-y2; int arcWidth=10; int arcHeight=10; //直线,矩形,椭圆的绘制 if(str.equals("line")){//直线 g.drawLine(x1, y1, x2, y2); }else if(str.equals("rect")){//矩形 g.drawRect(x, y, width, height); }else if(str.equals("oval")){//椭圆 g.drawOval(x, y, width, height); }else if(str.equals("roundrect")){//圆角矩形 g.drawRoundRect(x, y, width, height, arcWidth, arcHeight); }else if(str.equals("polygon")){//多边形 if(flag==false){ g.drawLine(x2, y2, x1, y1); x3=x2; y3=y2; flag=true; }else if(flag==true){ g.drawLine(x3,y3,x1,y1); x3=x1; y3=y1; } } };
//刷子、橡皮擦、 铅笔、 喷枪的绘制 public void mouseDragged(MouseEvent e){ x2=e.getX(); y2=e.getY(); //刷子 if(str.equals("brush")){ Graphics2D g2d=(Graphics2D)g; g2d.setStroke(new BasicStroke(8)); g2d.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; g2d.setStroke(new BasicStroke(1)); } //橡皮擦 else if(str.equals("easer")){ g.setColor(Color.WHITE); Graphics2D g2d=(Graphics2D)g; g2d.setStroke(new BasicStroke(8)); g2d.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; g2d.setStroke(new BasicStroke(1)); } //铅笔 else if(str.equals("pencial")){ g.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; } //喷枪 else if(str.equals("spray")){ Random random=new Random(); for(int i=0;i<30;i++){ int x=random.nextInt(10); int y=random.nextInt(10); g.drawLine(x2+x, y2+y, x2+x, y2+y); x1=x2; y1=y2; } } }
//鼠标左右键选取颜色 public void mouseReleased(MouseEvent e) { JLabel label=(JLabel)e.getSource(); Color c=label.getBackground(); int num = e.getButton(); if(num==1){ frontLabel.setBackground(c); }else if(num==3){ backLabel.setBackground(c); } }
但是还有一些按钮的功能没有实现:虚线五角星,虚线矩形,油漆,取色器,放大镜,写字,以及曲线;菜单栏按钮的功能没有实现;还有将画图板放大后,图像会消失,这个也没有解决。以后将会慢慢把它补充完整。
附上完整代码(求改进):
package com.newer.yt.draw.copy; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JRadioButton; /** * 主函数 * @author leaf-stop * */ public class DrawUI{ public static void main(String[] args) { DrawUI dui=new DrawUI(); dui.shoeUI(); } /** * 画图板主窗口 * 画图板布局及各个板块存放的东西 */ public void shoeUI(){ // 创建窗体 JFrame jf = new JFrame(); jf.setTitle("画图板"); jf.setSize(600,500); jf.setDefaultCloseOperation(3); //指定布局为边框布局 BorderLayout layout = new BorderLayout(); jf.setLayout(layout); //左边布局 JPanel left =new JPanel(); Dimension leftDim=new Dimension(100,1); left.setPreferredSize(leftDim); //中间布局 JPanel center =new JPanel(); center.setBackground(Color.GRAY); //底部布局 JPanel foot =new JPanel(); Dimension footdim=new Dimension(1,100);// foot.setPreferredSize(footdim); //设置位置 jf.add(left,BorderLayout.WEST); jf.add(center,BorderLayout.CENTER); jf.add(foot,BorderLayout.SOUTH); jf.setJMenuBar(craeteMenu()); //******************左边面板添加形状选择工具***************************************// //添加图片及按钮 ButtonGroup group =new ButtonGroup(); //定义一个一维数组来存放工具栏图片的名字,数字表示还没有实现的按钮 String[] strs ={ "0", "1", "easer", "3", "4", "5", "pencial", "brush", "spray", "9", "line", "11", "rect", "polygon", "oval", "roundrect"}; for(int i=0;i<16;i++){ JRadioButton btn1 =new JRadioButton(); left.add(btn1); group.add(btn1); btn1.setActionCommand(strs[i]); btn1.setSelected(true); // 设置按钮的图片 ImageIcon defaultIcon = new ImageIcon("img/draw"+i+".jpg"); btn1.setIcon(defaultIcon); ImageIcon rolloverIcon =new ImageIcon("img/draw"+i+"-1.jpg"); btn1.setRolloverIcon(rolloverIcon); ImageIcon pressedIcon = new ImageIcon("img/draw"+i+"-2.jpg"); btn1.setPressedIcon(pressedIcon); ImageIcon selectedIcon =new ImageIcon("img/draw"+i+"-3.jpg"); btn1.setSelectedIcon(selectedIcon); } //******************中间面板添加***********************************************// JPanel drawpJPanel=new JPanel(); Dimension drawDim=new Dimension(400,300); drawpJPanel.setPreferredSize(drawDim); drawpJPanel.setBackground(Color.WHITE); // 面板默认的布局是流式布局 // 指定中间面板的布局为流式布局左对齐 FlowLayout f1=new FlowLayout(FlowLayout.LEFT); center.setLayout(f1); center.add(drawpJPanel); //*******************底部面板添加颜色选择工具****************************************// JLabel frontLabel =new JLabel(); JLabel backLabel=new JLabel(); // 使用绝对定位布局 foot.setLayout(null); frontLabel.setBounds(50, 20, 40, 60); backLabel.setBounds(110, 20, 40, 60); frontLabel.setBackground(Color.BLACK); backLabel.setBackground(Color.BLUE); // 是否允许背景色显示出来 frontLabel.setOpaque(true); backLabel.setOpaque(true); foot.add(frontLabel); foot.add(backLabel); //颜色 Color[] cs={Color.BLACK, Color.GRAY, new Color(128, 0, 0),Color.RED, new Color(255, 128, 0), Color.YELLOW, Color.GREEN, new Color(0, 128, 255), Color.BLUE, Color.MAGENTA, new Color(255,128,128), new Color(128, 0, 125), new Color(128, 255, 0), new Color(128, 0, 255), new Color(0, 128, 120),new Color(128, 0, 20), new Color(128, 128, 0), new Color(100, 128, 255), new Color(128, 30, 50), new Color(128, 110, 50)}; ColorListener mlis =new ColorListener(frontLabel,backLabel); for(int i=0;i<20;i++){ JLabel colorLabel= new JLabel(); // 给颜色Label添加鼠标监听器 colorLabel.addMouseListener(mlis); if(i<10){ colorLabel.setBounds(160+30*i, 20, 25, 25); }else{ colorLabel.setBounds(160+30*(i-10), 50, 25, 25); } colorLabel.setBackground(cs[i]); colorLabel.setOpaque(true); foot.add(colorLabel); } jf.setVisible(true); //调用创建监听器的方法,并传入参数 DrawListener dlis = new DrawListener(drawpJPanel,group,frontLabel,backLabel); drawpJPanel.addMouseListener(dlis); drawpJPanel.addMouseMotionListener(dlis); } //*******************菜单栏的实现****************************************// /** * 创建菜单栏 * @return 返回JMenuBar的对象 */ private static JMenuBar craeteMenu() { //实例化一个JMenuBar类的对象jmb JMenuBar jmb=new JMenuBar(); String[] array={"文件","颜色","编辑","图像","帮助"}; String[][] array2={{"新建", "保存", "打开", "退出"},{"编辑颜色"},{"字体"},{"修改"},{"关于画图"}}; for(int i=0;i<array.length;i++){ JMenu jmenu=new JMenu(array[i]); for(int j=0;j<array2[i].length;j++){ JMenuItem jmt=new JMenuItem(array2[i][j]); jmenu.add(jmt); } jmb.add(jmenu); } return jmb; } } package com.newer.yt.draw.copy; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Random; import javax.swing.ButtonGroup; import javax.swing.ButtonModel; import javax.swing.JLabel; import javax.swing.JPanel; /** * 画图的监听器 * 各种按钮功能的实现 * @author leaf-stop * */ public class DrawListener extends MouseAdapter { private int x1,y1,x2,y2,x3,y3; private Graphics g; private JPanel drawJPanel; private ButtonGroup group; private String str="line"; private Color frontColor=Color.RED; private Color backColor=Color.BLUE; private JLabel frontLabel; private JLabel backLabel; public static boolean flag; //重载 public DrawListener(JPanel dp,ButtonGroup bg,JLabel fLabel,JLabel bLabel){ drawJPanel=dp; group=bg; frontLabel=fLabel; backLabel=bLabel; } //鼠标按下 public void mousePressed(MouseEvent e){ // 鼠标按下准备绘制图形的时候先获取能绘制的区域[画布] // 获取drawPanel在屏幕上占据的区域,作为可以改变颜色的区域 g=drawJPanel.getGraphics(); frontColor= frontLabel.getBackground(); backColor=backLabel.getBackground(); int num= e.getButton(); // 获得鼠标点击的是左键还是右键 if(num==1){ g.setColor(frontColor); }else if(num==3) g.setColor(backColor); // 鼠标按下准备绘制的时候来确定要绘制的图形 // 获得被选中的按钮模型 ButtonModel model= group.getSelection(); // 获得动作命令[每一个按钮的唯一标识] str=model.getActionCommand(); x1 = e.getX(); y1 = e.getY(); }; //释放 public void mouseReleased(MouseEvent e){ x2=e.getX(); y2=e.getY(); int x=x1<x2?x1:x2 ; int y=y1<y2?y1:y2 ; int width= x1<x2?x2-x1:x1-x2; int height=y1<y2?y2-y1:y1-y2; int arcWidth=10; int arcHeight=10; //直线,矩形,椭圆的绘制 if(str.equals("line")){//直线 g.drawLine(x1, y1, x2, y2); }else if(str.equals("rect")){//矩形 g.drawRect(x, y, width, height); }else if(str.equals("oval")){//椭圆 g.drawOval(x, y, width, height); }else if(str.equals("roundrect")){//圆角矩形 g.drawRoundRect(x, y, width, height, arcWidth, arcHeight); }else if(str.equals("polygon")){//多边形 if(flag==false){ g.drawLine(x2, y2, x1, y1); x3=x2; y3=y2; flag=true; }else if(flag==true){ g.drawLine(x3,y3,x1,y1); x3=x1; y3=y1; } } }; public void mouseDragged(MouseEvent e){ x2=e.getX(); y2=e.getY(); //刷子 if(str.equals("brush")){ Graphics2D g2d=(Graphics2D)g; g2d.setStroke(new BasicStroke(8)); g2d.drawLine(x1, y1, x2, y2); //将末位置变成下一次的初始位置 x1=x2; y1=y2; g2d.setStroke(new BasicStroke(1)); } //橡皮擦 else if(str.equals("easer")){ g.setColor(Color.WHITE); Graphics2D g2d=(Graphics2D)g; g2d.setStroke(new BasicStroke(8)); g2d.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; g2d.setStroke(new BasicStroke(1)); } //铅笔 else if(str.equals("pencial")){ g.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; } //喷枪 else if(str.equals("spray")){ Random random=new Random(); for(int i=0;i<30;i++){ int x=random.nextInt(10); int y=random.nextInt(10); g.drawLine(x1+x, y1+y, x2+x, y2+y); x1=x2; y1=y2; } } } //进入 public void mouseEntered(MouseEvent e){ }; //离开 public void mouseExited(MouseEvent e){ }; //点击 public void mouseClicked(MouseEvent e){ } } package com.newer.yt.draw.copy; import java.awt.Color; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JLabel; /** * 颜色选择的监听器 * @author leaf-stop * */ public class ColorListener implements MouseListener{ private JLabel frontLabel; private JLabel backLabel; public ColorListener(JLabel fLabel,JLabel bLabel){ frontLabel=fLabel; backLabel=bLabel; } public void mouseReleased(MouseEvent e) { // 获得事件源对象:发生事件的组件 // 由于监听器是加在Jlabel上的,所以事件源对象一定是JLabel JLabel label=(JLabel)e.getSource(); Color c=label.getBackground(); // 获得鼠标是左键还是右键 int num = e.getButton(); if(num==1){ frontLabel.setBackground(c); }else if(num==3){ backLabel.setBackground(c); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { } }
相关推荐
【JAVA简易画图板】是一个基于Java编程语言开发的简单绘图应用程序,它为用户提供了一个基本的图形界面,用户可以通过这个界面进行简单的绘画操作。这个程序包含了一些基本的绘图功能,如绘制形状、使用铅笔工具以及...
《Flash简易画图板:选中工具作图与互动功能详解》 在数字艺术和教育领域,Flash作为一种曾经广泛使用的交互式矢量图形和多媒体平台,曾为许多开发者提供了丰富的创作空间。本篇文章将深入探讨一个基于Flash开发的...
### 基于VC++MFC程序设计——简易画图板 #### 概述 本文档将详细介绍如何利用VC++中的MFC(Microsoft Foundation Classes)框架来开发一款简易的画图板应用程序。该画图板的主要功能包括但不限于图形的绘制、线型...
在本文中,我们将深入...通过以上步骤,我们可以构建一个功能完备的MFC简易画图板应用。这个过程涉及到Windows编程基础、MFC类库的使用、图形绘制以及用户交互等多个方面,是学习MFC和Windows编程的一个良好实践项目。
【Java简易画图板】是一个基于Java编程语言开发的简单图形绘制工具,它为用户提供了一个基本的画布,用户可以通过各种绘图工具进行创作。这个程序包含了一系列基础的图形元素和编辑功能,如直线、铅笔、圆形和矩形,...
《VC++简易画图板详解》 在计算机编程领域,C++是一种强大的、面向对象的编程语言,广泛应用于系统软件、应用软件、游戏开发、驱动程序等各个领域。本项目以VC++为工具,利用MFC(Microsoft Foundation Classes)...
【VB语言编写的简易画图板程序】 VB(Visual Basic)是Microsoft开发的一种可视化的、面向对象的编程语言,尤其适合初学者入门。这个“简易画图板程序”利用VB的强大功能,创建了一个用户友好的图形界面,允许用户...
《VC++ 6.0 MFC简易画图板:实现与技术详解》 在软件开发领域,Microsoft Visual C++ 6.0(简称VC++ 6.0)是一款经典的集成开发环境,它提供了强大的MFC(Microsoft Foundation Classes)库,方便开发者构建Windows...
这个“VB简易画图板 鼠标响应”项目主要涉及以下几个核心知识点: 1. **窗体控件**:首先,我们需要一个主窗体(Form)作为画图板的基础,它将承载所有的绘图操作。可以设置窗体的背景色为白色或其他颜色,以模拟...
【VC++课程设计——Paint Board简易画图板】 在计算机科学与技术领域,尤其是软件开发方向,VC++(Visual C++)是一种广泛使用的集成开发环境,由微软公司提供,用于编写C++语言的程序。本课程设计项目“Paint ...
【标题】"仿照win的简易画图板"是一个基于计算机图形学原理和技术,模仿Windows操作系统内置的“画图”程序开发的简单图形编辑软件。这个应用提供了基本的绘图工具,让用户能够进行简单的图形创作和编辑。 【描述】...
通过以上步骤,我们可以构建一个功能齐全的Java简易画图板。这个项目不仅可以帮助学习者掌握Java GUI编程,还能加深对图形绘制和事件处理的理解。在实际开发过程中,还可以进一步增加撤销/重做功能、图层管理、...
【简易画图板程序java】是一个基于Java编程语言实现的简单图形绘制软件,它涵盖了图形学的基本概念和技术,为用户提供了一个交互式的平台,可以进行基本的图形绘制操作。这个程序的核心功能包括画直线、绘制圆以及对...
在本案例中,“一个用QT写的简易画图板”是一个使用QT库开发的简单绘图应用程序,允许用户进行基本的绘画操作,如选择不同的颜色和笔触大小,并能保存创作的图像。 该程序的核心功能可能包括以下几个方面: 1. **...
《C#简易画图板详解》 在编程领域,C#是一种广泛应用的编程语言,尤其在Windows应用开发中,它以其强大的性能和易用性深受开发者喜爱。本项目“C#简易画图板”就是利用C#语言在Visual Studio 2010环境下构建的一个...
在这个简易画图板项目中,我们可能需要使用`JFrame`作为应用程序的主窗口,`JPanel`作为画布,以及`Graphics2D`对象进行绘图。 1. **JFrame**: 是Swing中的顶级容器,相当于窗口。在这里,我们将用它来创建我们的...
【简易画图板】是一种基于Microsoft Visual C++(VC++)和MFC(Microsoft Foundation Classes)框架实现的简单图形编辑工具。MFC是微软提供的一套面向对象的类库,它使得开发者能够更容易地利用Windows API来开发...
QT简易画图板程序是一个基于Qt库开发的简单图形绘制应用程序。Qt是一个跨平台的C++框架,广泛用于创建桌面、移动以及嵌入式设备的应用程序。本程序旨在提供一个基础的画图环境,用户可以在此基础上进行各种图形的...
"简易画图板 MFC(绝对原创)"是一款基于MFC(Microsoft Foundation Classes)开发的图形绘制工具。MFC是微软提供的一套C++库,它封装了Windows API,简化了Windows应用程序的开发过程。这款画图板软件包含了丰富的...