要实现画图板的基本功能,除了在qq登陆界面中用到的组件和方法外,还需要添加鼠标监听器,和接口实现。
首先,需要显示一个JFrame界面:
public class DrameFrame extends JFrame {
//显示界面
public void initUI(){
this.setSize(600,600);
this.setTitle("画图板");
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
this.setVisible(true);
//从窗体上获取画笔,在窗体可见之后获取
Graphics g=this.getGraphics();
}
然后需要给界面添加监听器,获取点击时的坐标,
DrameListener d=new DrameListener();
//给窗体对象增添鼠标监听器
this.addMouseListener(d);
在新写一个类用于实现鼠标监听器接口,实现接口需要重写其中所有方法,在方法中添加自己希望实现的功能,包括获取点击时的坐标,绘制各种图形,代码如下:
public class DrameListener implements MouseListener,MouseMotionListener{
private int x1,x2,y1,y2; //点击时获得的坐标,MouseMotionListener是用于实现拖动事件
private Graphics g;
private String s; //s用于获得文本框中的字符串
private ButtonListener but;
private Color color;
private int ax,ay,bx,by,cx,cy; //画三角形的坐标
private int flag=1;
public String getS(){
return s;
}
//
public void setBut(ButtonListener but){
this.but = but;
}
public void setG(Graphics g){
this.g=g;
}
@Override
public void mouseClicked(MouseEvent e) {
//通过标志找到点击过的点
if(flag == 1 && s.equals("三角形")){
ax = e.getX();
ay = e.getY();
flag++;
}else if(flag == 2){
bx = e.getX();
by = e.getY();
flag++;
}else if(flag == 3){
cx = e.getX();
cy = e.getY();
g.drawLine(ax, ay,bx, by);
g.drawLine(bx, by,cx, cy);
g.drawLine(ax, ay,cx, cy);
flag = 1;
}
}
@Override
public void mousePressed(MouseEvent e) {
x1=e.getX();
y1=e.getY();
s = but.getS();
color = but.getColor();
g.setColor(color); //按下时获得颜色
System.out.println("but,getS()="+s);
}
@Override
public void mouseReleased(MouseEvent e) {
x2=e.getX();
y2=e.getY();
if(s.equals("直线")){
System.out.println("x2 = "+x2 +" y2 = "+y2);
g.drawLine(x1, y1, x2, y2);
}
else if(s.equals("椭圆")){
for(int i=1;i<=100;i++){
g.setColor(new Color(2*i,i+100,0));
g.fillOval(x1+i/2, y1+i/2, Math.abs(x1-x2)-i, Math.abs(y2-y1)-i);
}
}
else if(s.equals("矩形")){
g.drawLine(x1, y1, x1,y2);
g.drawLine(x1, y1, x2, y1);
g.drawLine(x2, y1, x2, y2);
g.drawLine(x1, y2, x2, y2);
}
// else if(s.equals("三角形")){
// g.drawLine(x1, y1, x2, y2);
// g.drawLine(x1, y1, x1, y2);
// g.drawLine(x1, y2, x2, y2);
// }
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
//实现拖动
public void mouseDragged(MouseEvent e) {
System.out.println(">>>>>>>>>>>");
// TODO Auto-generated method stub
if(s.equals("铅笔")){
x2=e.getX();
y2=e.getY();
g.drawLine(x1, y1, x2, y2);
x1=x2;y1=y2;
}
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
}
在添加一个类,用于侦听获取点击时按钮中的文字或颜色:
public class ButtonListener implements ActionListener {
private String s = "直线";
private Color color;
public String getS(){
return s;
}
public Color getColor(){
return color;
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("")){
//获取当前事件源对象
JButton jbu=(JButton)e.getSource();
//获取颜色按钮的背景色
color = jbu.getBackground();
System.out.println("color= "+color);
}else {
// 获取按钮上的字符串
s = e.getActionCommand();
}
// System.out.println("s = "+s);
}
}
在实现过程中,需要注意的有画笔和参数的传递,监听器的正确添加,按钮中文字或颜色的正确获取。
相关推荐
用java实现的windows画图板的简单模式,对于java初学者的事件触发器学习有很好的帮助。。。
基于qt实现的画图板,内含基本的绘画功能,例如选取画笔,填充,图像打开和保存等。
自己用C#写的画图板程序,能够画出直线、圆、矩形等基本图形
仿windows画图板程序,基本实现windows画图板的功能
这是一款android的画图板实现代码,基本功能齐全,适合初学者开发的例子程序。
用java实现的小型画图板,具备基本的画图功能,如画四方形、画圆、画三角形、画多边形还有橡皮擦功能。
实现了基本的绘画,包括圆、椭圆、直线、矩形、文本。
这个是本人用C#写的一个画图板程序,实现了画轨迹,直线,矩形,椭圆,圆角矩形。可以取前景色,背景色,可以显示鼠标的坐标,可以保存当前所画的内容等等功能,总的来说,功能不是很强大,但是作为一个写画图板的...
C#实现画图,基本功能都有,供需要的朋友参考
1.具有标准Windows应用程序的...2.通过选择菜单或工具栏中相应功能完成基本几何图形的绘制(基本几何图形包括直线、圆、椭圆、矩形、多边形、扇形、弧等); 3.几何图形实现存盘和读取显示功能; 4.应用程序界面友好。
对于这个程序的实现的基本思路是:通过鼠标事件获取面板上的坐标位置,作为绘图的参数和顶点。由于要求设置出画笔的粗细和颜色我们可以把我们获取的面板的Graphic强制转化为Graphi2D对象,职业我们就可以获得更多的...
用Java模拟画图板,实现基本图形的绘画,并支持撤销、清空、重复功能,可提供颜色选择。。。
基于Visu C++技术的画图板,采用MFC框架,可以实现一些基本的画图板功能
这是一款基于WinForm应用程序的画图板主要实现了一下功能 1、操作:主要包括读取图片、和图片操作后的保存 2、图像工具栏:主要包括椭圆、铅笔、矩形、三角形、直线等画图工具的使用 3、画笔:主要包括画笔的粗细...
C# 画图 可实现调色板 铅笔 圆形 矩形 保存 等基本画图功能
JAVA编写的简易画图板程序,采用GUI图形界面 能够实现画图板的基本功能
用C#。NET2.0做的画图板,实现了基本的功能
用MFC实现画图板的基本功能~并且附有简单的介绍~
简单的画图板源码 用VS2008的C#编写的,主要用于学习多态,实现了基本功能,画线、画圆等
用java 写的简单的画图板程序 实现了文件的保存 打开 读取和一些基本图形的画法 比较简单