- 浏览: 45406 次
- 性别:
- 来自: 深圳
最新评论
-
xjdwilltrue:
想当年我用matlab做的毕业设计,现如今都不知道楼主说的是什 ...
Matlab入门需掌握的一些知识 -
laogao3232:
我当年毕业设计就是用matlab处理图像的。
图像处理之二值化形态学(1) -
jhq198:
comsci 写道老大,你这个软件是什么语言开发的? 开源否? ...
图像处理之二值化形态学(1) -
comsci:
老大,你这个软件是什么语言开发的? 开源否?
图像处理之二值化形态学(1) -
梳子不爱头发:
写的很详细,不信你看
图像增强之空域变换增强(2)
在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) {
}
}
值传递意即只传递数值方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。它适用于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) {
}
}
发表评论
-
实现多人聊天——简单群聊服务器的实现
2014-07-25 23:36 778作为一个现代人,我 ... -
通信入门之实现最简单的网上聊天
2014-06-02 11:32 1349想要实现网 ... -
探索分形,创造美!
2014-05-19 17:15 1070何为分形,简单来说,它就是一种具有自相似特性的现 ... -
探索分形,制造美!
2014-05-19 16:54 1何为分形,简单来说,它就是一种具有自相似特性的现象、图象或 ... -
线程小动画之屏保--模仿小球碰撞反弹(二)
2014-04-20 13:07 1380之前已经能产生许多小 ... -
线程小动画之屏保--模仿小球碰撞反弹(一)
2014-04-20 12:47 2562相信大家都对屏幕保护中的小球碰撞动画深有印象吧 ... -
学习哈夫曼树--------两部曲
2014-03-28 20:45 687学习一样事物,自然要先明其义,再通其用。哈夫曼树, ... -
Java中单链表之浅析
2014-03-23 14:40 852何谓链表?百度下可以知道链表是一种物理存储上 ... -
画板的重绘
2014-03-09 14:15 508当我们写好一个简易画板,然后在上面画线,画 ... -
Java中的数组
2014-03-03 21:16 559谈到数组,大家都在学习C语言中频繁接触到它,自然 ... -
Java中的重要类
2014-02-13 22:53 587Java中有两个重要类,Str ... -
泛型
2014-02-13 22:16 407众所周知,Object类型 ... -
基本数据类型的强制转换
2014-02-13 21:56 668基本数据类型之间可以很方便的进行转换,主要有几种常见的方法,归 ... -
事件机制的总结
2013-12-05 21:31 395当别人打电话过来 ... -
类的继承总结
2013-12-02 21:59 432在生活中我们往往把许多东西归为一个整体,如球有篮球,足球 ... -
类和对象的总结
2013-11-27 21:30 385当说到对象,你的脑海里面浮现的可能是蔚蓝天空下,巍峨山峰 ... -
Java数据类型总结
2013-11-25 17:19 409Java语言类型分为两种,基本数据类型和对象数据类型。对 ...
相关推荐
字体参数,(可传递自定义字体,也可以直接传递控件的字体。)。 二.打印机打印的各个方法,相当于模块化的打印过程,按打印的内容顺序进行编写,按过程打印(打印机控件暴露出不支持打印总页数的问题)。 三.写完...
在易语言中,实现画板中的文本滚动显示是一项常见的需求,特别是在制作日志窗口、聊天室或者数据显示界面时。今天我们将探讨如何在易语言中实现在画板中写出指定文本,并在画板内容满溢时自动滚屏。 首先,我们要...
在日常工作中,无论是制作教程、演示操作过程还是记录有趣瞬间,ScreenToGif都是一个理想的解决方案。 GIF图像是一种常见的网络图像格式,以其小巧的体积和循环播放的特点广泛应用于社交媒体、博客和论坛。通过...
生成网表是将原理图转换为PCB设计的关键步骤之一,用于将电路逻辑信息传递给PCB设计工具。 **关键步骤:** 1. **检查原理图:** 使用`Design Rules Check`工具检查电路图的正确性。 2. **生成网表:** 通过`Create ...
java的参数传递;自定义形状类;类的加载顺序;方法和变量在继承时的覆盖和隐藏;排序类; 3数字 数字类;格式化数字;转换数字进制;生成随机数; 4数组和集合 使用Arrays类;动态调整数组长度;java为数据结构中的...
3. **合并用户配置**:使用jQuery的`extend`方法将用户传递的参数与默认选项合并,`options = $.extend({}, defaults, options);`。 4. **初始化插件**:在插件内部获取canvas元素,创建绘图所需的对象,如画笔`var...
1.25 使用JavaScript传递页面参数 1.26 页面被冻结 第 2章 按钮特效 2.1 页面刷新按钮 2.2 按回车调用登录按钮 2.3 动态创建按钮 2.3 平面按钮 2.4 按钮的嵌入效果 2.5 按钮改变状态栏信息 2.6 定义按钮的热键 2.7 ...
1.25 使用JavaScript传递页面参数 1.26 页面被冻结 第 2章 按钮特效 2.1 页面刷新按钮 2.2 按回车调用登录按钮 2.3 动态创建按钮 2.3 平面按钮 2.4 按钮的嵌入效果 2.5 按钮改变状态栏信息 2.6 定义按钮的热键 2.7 ...
操作系统界面功能支持库(shell.fne)中的“执行()”命令增加一个参数“窗口显示方式”,作用与核心库“运行()”命令的同名参数一致。 6. 数据库操作支持库增加读写长整数字段的功能,但受限于系统接口暂不能读写...