`
海王子1994
  • 浏览: 43672 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

论参数传递与简单画板的制作

阅读更多
   在Java中,参数传递分为两种类型,一种是值传递,另一种是引用传递,也称地址传递。
    值传递意即只传递数值方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。它适用于Java中的基本数据类型包括了String。
    引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。例子如下:(设已经创建了Student类)

                      String name = "柯南";

Student stu = new Student();//实例化对象
stu.setName(name);
int score = 100;


Student stu1 = new Student();
stu1.setName("小兰");

stu1 = stu;

stu.setName("哀");

stu1.study(5);
stu.study(score);
System.out.println("score  = "+score);
我们会发现输出的是:柯南在学习,得分为5分。
                    哀在学习,得分为100分。
                    score=100
可知引用传递适用于Java中的对象类型(类类型,引用类型),对象类型包括定义的类,接口,抽象类和数组。        

在了解了参数的传递后,我们来谈谈简单画板的制作: 
    首先,画板需要使用三个组件:JFrame,JPanel,JButton. 其次我们要分析简单画板的布局,知道要采用边框布局,创建两个面板,北边面板上放按钮;中间面板上供画画。
大概初步实现画板界面的步骤如下:
       1.定义一个A类,在类中定义主函数,在主函数中创建A类的对象调用初始化界面的方法
       2.在A中定义一个初始化界面的方法
       3.初始化界面的方法中,创建JFrame的对象,设置JFrame对象的属性值(布局)
      4.定义创建北边面板的方法,参数是JFrame对象。然后设置面板属性,再创建按钮,设置按钮大小,文本,将按钮添加到面板上。最后将北边面板添加到窗体的北边。
       5.定义创建中间面板的方法,参数是JFrame对象,设置属性
       6.将中间面板要添加到窗体的中间
接着要实现画板功能,我们就要安装事件监听器了。事件源有两个,所有的按钮和中间面板,分别用的事件监听器方法为
  addActionListener(ActionListener l);和addMouseListener(MouseListener l);
最后补充说下:Graphics Graphics提供了绘制图形的方法。
通过完成这些,我们便可实现画板上的所有图像,铅笔,刷子,橡皮擦,喷枪等各式各样的功能!怎样,心动了吧!那就自己动手做一个吧!!

我弄的简单画板制作代码如下,可供参考:


package preparation;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Draw {

/**
* @param args
*/


public static void main(String[] args) {
// TODO Auto-generated method stub
//实例化一个画板对象
       Draw sd=new Draw();
       //调用显示画板的方法
       sd.showUI();
}
    public void showUI()
    {
    /*
    * 实例化一个窗体对象
    */
    JFrame jf=new JFrame();
    jf.setTitle("普通画板");//设置窗体标题
    jf.setSize(600,500);//设置窗体大小
    jf.setLayout(new BorderLayout());//设置窗体布局为边框布局
    jf.setResizable(false);//禁止窗体改变大小
    jf.setLocationRelativeTo(null);//设置窗体居中
    jf.setDefaultCloseOperation(3);//设置关闭窗体关闭程序
   
   
   
    //调用创建北边面板方法
    JPanel northpanel=creatNorthPanel();
    //将面板添加到窗体上
    jf.add(northpanel,BorderLayout.NORTH);
   
    //调用创建中间面板方法
    JPanel centerpanel=creatCenterPanel();
    //将面板添加到窗体上
    jf.add(centerpanel,BorderLayout.CENTER);
   
       
    jf.setVisible(true);//设置窗体为可见     //  先让窗体可见,再弄下面的程序!!!!!!!!!!!!!!!!!!!!!!!!
   
    Graphics g=centerpanel.getGraphics();//从中间面板中接收Graphics对象
   
    DrawListener ml=new DrawListener(g,this);//实例化一个DrawListener类对象

    //给中间面板添加动作监听器,绑定MouseListener事情处理类对象
        centerpanel.addMouseListener(ml);
        //给中间面板添加动作监听器,绑定MouseMotionListener事件处理类对象
        centerpanel.addMouseMotionListener(ml);

   
    }
   
    private String str="Line";//定义一个存储图像的属性值
  /*
   * 获得存储图像的属性
   */
public String getStr()
{
return str;
}

    private Color color;//定义颜色的属性值
    /*
     * 获得颜色的属性
     */
    public Color getColor()
    {
    return color;
    }
    /*
     *  创建北边面板的方法
     */
    public JPanel creatNorthPanel()
    {   JPanel north_panel=new JPanel();//实例化北边面板的对象
        //设置北边面板的属性
        north_panel.setPreferredSize(new Dimension(500,100));//设置北边面板大小
        north_panel.setLayout(new FlowLayout(FlowLayout.LEFT));//设置北边面板布局为流式布局,并向左对齐
       
        //匿名实现类,实现ActionListener接口
        ActionListener al=new ActionListener()
        {
        //事情发生类方法
        public void actionPerformed(ActionEvent e)
        {  
        //判断是否点击到"Color"按钮
        if(e.getActionCommand().equals("Color"))
        {  //弹出一个颜色选择器,供选择颜色;选择好的颜色返回color
        color=JColorChooser.showDialog(null, "颜色选择器", Color.BLACK);[align=center][/align]
        }
        else
          {//获取按钮上的文本
        str=e.getActionCommand();//将获得的字符赋给字符串str
           
        }
        }
        };//注意加“;”!!!!!!!!!!!!!!!!!!
      
       
       //创建一位数组,储存按钮上的文本
        String []array={"Line","Rectangle","Oval","RoundRect","Polygon","Pencil","Color","Eraser","Brush","Gunjet"};
      
      // 遍历数组,创建按钮,并添加文本在按钮上
      
        for(int i=0;i<array.length;i++)
        {   
        JButton jb=new JButton(array[i]);//实例化按钮对象
        jb.setPreferredSize(new Dimension(100,40));//设置按钮大小
        //给事件源添加动作监听器方法,绑定事件处理类对象
        jb.addActionListener(al);
        north_panel.add(jb);//将按钮添加到北边面板上
        }
    return north_panel;
    }
    /*
     * 创建中间面板的方法
     */
    public JPanel creatCenterPanel()
    {  JPanel center_panel=new JPanel();//实例化中间面板的对象
        center_panel.setBackground(Color.WHITE);//设置面板的背景色
            return center_panel;
    }

}




package preparation;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;

public class DrawListener implements MouseListener ,MouseMotionListener {
private int x1,x2,y1,y2;//记录鼠标两次点击的坐标
    private Graphics g;//从界面对象上得到的画布对象
    private Graphics2D gg;
    private Draw sd;
    private int flag=1;
    public int m,n;
   
   
    //构造方法,用来接收Graphics对象和Draw类对象
    public DrawListener(Graphics g,Draw sd){
    this.g=g;
    this.sd=sd;
    }
    //鼠标按下的点的坐标
    public void mousePressed(MouseEvent e){
    //记录第一次点击的x,y:通过事件对象e得到的
    x1=e.getX();
    y1=e.getY();
    flag++;
    if(flag==2)
    {
    m=x1;
    n=y1;
    }
    //判断鼠标是按左键还是右键
    if(e.getButton()==1)
    {  //按左键,颜色为sd得到的黑色
    g.setColor(sd.getColor());
    }
    else if(e.getButton()==3)
    { //按右键,颜色为绿色
    g.setColor(Color.GREEN);
    }

    }
    //鼠标释放时的坐标
    public void mouseReleased(MouseEvent e)
    {
    //记录第二次点击时的坐标
    x2=e.getX();
    y2=e.getY();
   
    //判断是否为Line
    if(sd.getStr().equals("Line"))
    {

    //调用画布对象的方法,画直线
    g.drawLine(x1,y1,x2,y2);
    }
    /*
    * 判断是否为矩形Rectangle
    */
    if(sd.getStr().equals("Rectangle"))
    {
    g.drawRect(Math.min(x1, x2), Math.min(y1, y2),Math.abs(x1-x2), Math.abs(y1-y2));//Math.min(x1, x2), Math.min(y1, y2)!
    }
    /*
    * 判断是否为椭圆形Oval
    */
    if(sd.getStr().equals("Oval"))
    {
    g.drawOval(x1, y1,Math.abs(x1-x2) , Math.abs(y1-y2));
    }
    /*
    * 判断是否为RoundRect
    */
    if(sd.getStr().equals("RoundRect"))
    {
    g.drawRoundRect(x1, y1, Math.abs(x1-x2),Math.abs(y1-y2), Math.abs(x1-x2)/2,Math.abs(y1-y2)/2 );
    }
    }
    /*
     * 当鼠标在事件源上单击时按键执行的方法
     */
    public void mouseClicked(MouseEvent e)
    {   //获取点击过程中的坐标值
int x = e.getX();
int y = e.getY();

    if(sd.getStr().equals("Polygon"))
    {
      g.drawLine(x, y, m, n);
    }
    }
    public void mouseEntered(MouseEvent e)
    {}
    public void mouseExited(MouseEvent e)
    {}
/*
* 当鼠标在事件源上拖拉时按键执行的方法
*/
public void mouseDragged(MouseEvent e) {
//判断点击的按钮是否为"Pencil"
if(sd.getStr().equals("Pencil"))
{
//获取x,y的坐标值
int x=e.getX();
int y=e.getY();
//画线
g.drawLine(x1, y1, x, y);
//赋值
x1=x;
y1=y;

}
//判读点击的按钮是否为"Eraser"
if(sd.getStr().equals("Eraser"))
{
//获取x,y的坐标值
int x=e.getX();
int y=e.getY();
//设置线条为白色
   g.setColor(Color.WHITE);
//画线
   gg =(Graphics2D)g; //实例化一个Graphics2D对象
   //设置笔的粗细为2.0F,线条端点是CAP_ROUND,点划线模式为 JOIN_ROUND 
       gg.setStroke(new   BasicStroke(10.0F,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));  
   gg.drawLine(x1,y1,x,y);  
       gg.setStroke(new   BasicStroke());  
//赋值
x1=x;
y1=y;

}

//判读点击的按钮是否为"Brush"
if(sd.getStr().equals("Brush"))
{
//获取x,y的坐标值
int x=e.getX();
int y=e.getY();
//设置线条为黑色
  g.setColor(Color.BLACK);
            /*
                      *画线
                      */

gg =(Graphics2D)g; //实例化一个Graphics2D对象
       //设置笔的粗细为2.0F,线条端点是CAP_ROUND,点划线模式为 JOIN_ROUND 
gg.setStroke(new   BasicStroke(10.0F,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));  
     gg.drawLine(x1,y1,x,y);  
        gg.setStroke(new   BasicStroke());  
//赋值
x1=x;
y1=y;

     }
//判读点击的按钮是否为"Gunjet"
if(sd.getStr().equals("Gunjet"))
{

           //获取x,y的坐标值
   int x=e.getX();
  int y=e.getY();
   int x0=0;             int y0=0;
//设置线条为黑色
   g.setColor(Color.BLACK);
//噴槍大小
int size=8;                //噴槍点數
int count=10;
for(int i=0;i<count;i++)
{  x0 = new Random().nextInt(size)+ 1;
y0 = new Random().nextInt(size) + 1;
g.fillRect(x+x0, y+y0,5,5);
}
}

/*
    * 判断是否为Polygon
    */
    //获取拖动过程中的坐标值
int x = e.getX();
int y = e.getY();



    if(sd.getStr().equals("Polygon"))
    {
    //判断鼠标点击的坐标是不是与第一次点击的一样,不同则画线
    if((x!=m)||(y!=n))
    {
    //画线
    g.drawLine(x1, y1, x, y);
    //赋值
    x1=x;
    y1=y;
    }
   
   
      
    }
}
/*
* 事件源上移动鼠标的方法
*/
public void mouseMoved(MouseEvent e) {


}
   
   
}
分享到:
评论

相关推荐

    几何画板制作课件

    使用几何画板制作数学类课件的PPT,很详尽地介绍的几何画板制作数学课件的方法。

    andriod画板制作教程

    andriod大作业,andriod画板制作教程,andriod画板程序代码。

    VB制作的简单画板程序

    VB制作的简单画板程序,可以改变画笔颜色

    基于MFC的画板制作具体代码

    基于MFC的画板制作具体代码,适合初学者学习和了解画板的代码。基于MFC的画板制作具体代码,适合初学者学习和了解画板的代码。基于MFC的画板制作具体代码,适合初学者学习和了解画板的代码。

    MFC制作的画板

    mfc制作的画板 源代码简单 适合初学者使用 观摩 学习 mfc制作的画板 源代码简单 适合初学者使用 观摩 学习

    qt之简易画板

    本程序为简易画板程序,主要解决画板的一些基本问题,并保持绘画的流畅。希望对新人有所帮助

    MFC 画板制作源代码

    使用MFC制作可以绘画矩形,椭圆,直线的图层画板,可以改变线条粗细和颜色,还可以填充颜色,可以拖动等等的mfc源码

    电子画板个人制作

    电子画板,可以用鼠标随意画画、书写,可以回放画过的过程,适合做电子教学使用,是个人学习中制作的。

    C#简易画板

    这是用C# GDI实现的简易画板Demo,对应博文http://blog.csdn.net/luols/article/details/7171668,有需要的朋友可以下载样例试用

    JAVA画板论文设计

    不错的,看看吧!好好好好好,画板画板,画板画板

    用qt 编写简易画板

    这是我初学qt编写的简易画板程序,程序结构和算法不算优秀,请多多指教

    易语言简易画板

    易语言简易画板源码,简易画板,公用接口_寻找文件扩展,公用接口_复制目录,公用接口_数组到表格,公用接口_生成编号,公用接口_生成密码,公用接口_时间到文本,公用接口_数据到十六进制文本,公用接口_十六进制文本到数据,...

    canvas在线画板制作

    这是用JavaScript技术和canvas接口写的在线画板,里面注释清楚,可以保存图片!

    如何使用几何画板制作课件

    如何使用几何画板制作课件,一个完整的资料包,全面的很。

    Android简易画板源码

    使用Android的自定义View写的Android画板程序,主要使用DrawPath()实现,需要的童鞋可以下来看看。

    MFC简易画板

    用VC开发工具编写的MFC简易画板,可以实现类似与windows自带画板的一些功能

    C# 2010 简易画板

    提供源代码 直接可运行 提供了比较全面的画板功能

    简易画板.py

    使用python做的一个简易画板,能够实现画点、画直线、画多边形、画椭圆等功能,其中包含了对Tkinter的操作以及对于GUI的操作,希望对python初学者能够有所帮助

    c#简易画板

    用c#语言编写的简易画板程序,可以实现简易的绘画功能,可以绘制直线矩形…… 有参考一下别人的代码

    js 使用canvas制作一个简易的画板.pdf

    js 使用canvas制作一个简易的画板

Global site tag (gtag.js) - Google Analytics