`
qq_24665727
  • 浏览: 121296 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

画笔功能的实现

阅读更多
DrawUI界面类
package Draw;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;

import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

//画图板主窗口
public class DrawUI {
public static void main(String[] args) {
//创建窗体
JFrame jf=new JFrame();
jf.setTitle("XP画图板");
jf.setBounds(100,100,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);
//left.setBackground(Color.blue);
/*
* 1.setPreferredSize需要在使用布局管理器的时候使用,
* 布局管理器会获取空间的preferredsize,因而可以生效。
* 例如borderlayout在north中放入一个panel,panel的高度可以通过这样实现:
* panel.setPreferredSize(new Dimension(0, 100));这样就设置了一个高度为
* 100的panel,宽度随窗口变化。
* */



JPanel center=new JPanel();
center.setBackground(Color.gray);


JPanel  foot=new JPanel();
Dimension footDim=new Dimension(1,100);//设置大小
foot.setPreferredSize(footDim);
//foot.setBackground(Color.red);


jf.add(left,BorderLayout.WEST);
jf.add(foot,BorderLayout.SOUTH);
jf.add(center,BorderLayout.CENTER);

//**************给左边面板添加形状选择工具***************************//
//按钮组对象,给单选按钮进行逻辑分组
ButtonGroup group=new ButtonGroup();
//利用循环来添加按钮对象

String[] strs={"0","1","2","3","4","5","6","7","8","9","line","11","rect","13","oval","15"};
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("image/draw" + i + ".jpg");
btn1.setIcon(defaultIcon);

ImageIcon rolloverIcon = new ImageIcon("image/draw" + i + "-1.jpg");
btn1.setRolloverIcon(rolloverIcon);

ImageIcon pressedIcon = new ImageIcon("image/draw" + i + "-2.jpg");
btn1.setPressedIcon(pressedIcon);

ImageIcon selectedIcon = new ImageIcon("image/draw" + i + "-3.jpg");
btn1.setSelectedIcon(selectedIcon);
}





/*
JRadioButton btn1=new JRadioButton("直线");
left.add(btn1);//加在左边面板
group.add(btn1);//添加分组
btn1.setActionCommand("line");//设置唯一标识
btn1.setSelected(true);


JRadioButton btn2=new JRadioButton("矩形");
left.add(btn2);
group.add(btn2);
btn2.setActionCommand("rect");//设置唯一标识

JRadioButton btn3=new JRadioButton("椭圆");
left.add(btn3);
group.add(btn3);
btn3.setActionCommand("oval");//设置唯一标识
*/

//给中间的面版添加绘图板
JPanel drawPanel=new JPanel();
Dimension drawDim=new Dimension(400,300);//设置大小
drawPanel.setPreferredSize(drawDim);
drawPanel.setBackground(Color.white);

//面板的默认布局为流式布局
//指定布局为流式布局左对齐
FlowLayout f1=new FlowLayout(FlowLayout.LEFT);
center.setLayout(f1);
center.add(drawPanel);


jf.setVisible(true);


DrawListen lis = new DrawListen(drawPanel,group);
drawPanel.addMouseListener(lis);




//获取drawPanel在屏幕上的区域,

}
}




DrawListen类
package Draw;

import java.awt.Graphics;
import java.awt.dnd.MouseDragGestureRecognizer;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JComponent;
import javax.swing.JPanel;

public class DrawListen implements MouseListener {
private int x1, x2, y1, y2;// 鼠标挤压和离开时的坐标
private JPanel drawPanel;
private Graphics g3;
private ButtonGroup group;
private String str = "line";
private boolean first=true;

public DrawListen(JPanel dp, ButtonGroup b) {
drawPanel = dp;
group = b;

}

// 鼠标挤压
@Override
public void mousePressed(MouseEvent e) {
// 鼠标按下准备画的时候获取能绘制的区域,画布
g3 = drawPanel.getGraphics();
// 鼠标按下准备绘制的图形才确定所选择的单选按钮(画笔)
// 获得被选中的按钮模型
ButtonModel model = group.getSelection();
// 获得动作命令[每一个按钮的唯一标识
str = model.getActionCommand();
x1 = e.getX();
y1 = e.getY();

// 颜料--------------------------
if (str.equals("8")) {
g3.drawString(".", x1, y1);
g3.drawString(".", x1 + 3, y1);
g3.drawString(".", x1, y1 + 3);
g3.drawString(".", x1 + 3, y1 + 3);
g3.drawString(".", x1 - 3, y1);
g3.drawString(".", x1, y1 - 3);
g3.drawString(".", x1 - 3, y1 - 3);
g3.drawString(".", x1 - 6, y1);
g3.drawString(".", x1 + 6, y1);
g3.drawString(".", x1, y1 + 6);
g3.drawString(".", x1 + 6, y1 + 6);
g3.drawString(".", x1 - 6, y1);
g3.drawString(".", x1, y1 - 6);
g3.drawString(".", x1 - 6, y1 - 6);
}

// *-------颜料**************


//铅笔
if(str.equals("6")){
x1 = x2 = e.getX();
y1 = y2 = e.getY();
drawPanel.addMouseMotionListener(adapter);
    drawPanel.addMouseListener(adapter);
}
//铅笔




//橡皮擦
if(str.equals("2")){

}


//橡皮擦

}

// 鼠标离开
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
x2 = e.getX();
y2 = e.getY();

// 画图,圆,直线,矩形

if (str.equals("line")) {//直线
g3.drawLine(x1, y1, x2, y2);
} else if (str.equals("rect")) {//矩形
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;
g3.drawRect(x, y, width, height);
} else if (str.equals("oval")) {//圆
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;
g3.drawOval(x, y, width, height);
}else if(str.equals("6")){//铅笔
if (e.getButton() == MouseEvent.BUTTON1) {
drawPanel.removeMouseListener(adapter);
drawPanel.removeMouseMotionListener(adapter);
}
}
}


// 鼠标拖拽事件,在鼠标拖动的时候触发*************铅笔*****
MouseAdapter adapter = new MouseAdapter() {
public void mouseDragged(MouseEvent e) {
//循环使用drawLine方法来画线条,交换(x1,y1)和(x2,y2)的位置
if (first) {
x2 = e.getX();
y2 = e.getY();
g3.drawLine(x1, y1, x2, y2);

first = false;
} else {
x1 = x2;
y1 = y2;
x2 = e.getX();
y2 = e.getY();
g3.drawLine(x1, y1, x2, y2);
}
}
};
//*****************铅笔


public void mouseClicked(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}
}
只实现了几个功能,画笔,直线,圆,矩形,颜料盒
0
2
分享到:
评论

相关推荐

    VS之MFCGDI画笔功能实现

    基于对话框的 MFC 工程,主要是GDI 对象之画笔 CPen的代码:在对话框上有一个 Picture 控件,将此控件的背景填充为黑色;启动一个定时器,每次定时器到时,所有波形数据都前移一个...这样就实现了波形的绘制及动态变化

    微信小程序canvas画布实现画笔自由绘制

    在微信小程序中,canvas画布是一个...本篇将详细介绍如何利用微信小程序的canvas API来实现画笔自由绘制。 首先,我们需要在页面的wxml文件中引入canvas组件,并为其分配一个唯一的id,以便在JS中进行操作: ```html ...

    C#实现完整的画笔功能

    总的来说,这个"C#实现完整的画笔功能"项目是学习C# GUI编程、事件处理和Windows API交互的一个很好的实践。它涵盖了从简单用户界面元素的使用到更复杂的系统级交互,对提升开发者的技术能力大有裨益。

    MFC利用鼠标实现画笔功能

    在本文中,我们将深入探讨如何使用Microsoft Foundation Classes (MFC) 框架来实现一个基本的画笔功能,该功能允许用户通过鼠标在屏幕上绘制线条。MFC 是微软为Windows应用程序开发提供的一种C++库,它简化了窗口、...

    屏幕画笔,实现了画笔,橡皮檫等等功能

    屏幕画笔是一款实用工具,主要用于在屏幕上进行标注和绘图,它集成了画笔和橡皮擦等基本绘画...屏幕画笔这类工具对于教学、会议和远程协作非常有用,通过编程实现这些功能可以帮助我们更好地理解和利用计算机图形技术。

    c++实现画笔功能,画刷功能

    在C++编程中,实现画笔和画刷功能通常涉及到图形用户界面(GUI)的开发。这是一项重要的技能,尤其对于那些希望构建桌面应用程序或游戏的开发者来说。本篇文章将详细探讨如何使用C++来创建这样的功能,以及相关的...

    android实现屏幕画笔工具

    在Android平台上实现一个屏幕画笔工具,涉及到许多关键的技术点,包括图形绘制、触摸事件处理、用户交互设计等。下面将详细阐述这些知识点。 首先,Android的图形绘制主要依赖于Canvas和Paint对象。Canvas提供了...

    简单的画笔绘制功能实现

    在Android开发中,"简单的画笔绘制功能实现"是一个常见的需求,主要涉及到Canvas、Paint以及Bitmap等核心组件的使用。本教程将详细讲解如何利用缓存原理来实现这一功能,并探讨其在更复杂的图片和图像绘制中的应用。...

    android 画笔画板功能效果的实现.zip

    本项目标题"android 画笔画板功能效果的实现.zip"揭示了其核心内容:实现了一个能够模拟钢笔和水彩笔效果的画板,并且具备清除画布功能。下面我们将详细探讨这些知识点。 1. **Canvas与Paint类**: Android中的`...

    unity实现粒子画笔和路径画笔

    本文将深入探讨如何利用Unity实现粒子画笔和路径画笔,这两种创新的人机交互方式。 首先,让我们关注“粒子画笔”。粒子画笔的核心是通过粒子系统的参数设置来模拟画笔的特性。以下是一些关键知识点: 1. **粒子...

    画笔演示

    描述中的"画笔演示源码"进一步确认了这是一个关于画笔功能实现的代码示例。这种类型的源码可能包括各种功能,如鼠标或触屏的实时追踪,颜色选择,线条粗细调整,橡皮擦功能,以及保存和加载绘图等。源码分析能帮助...

    VC++画笔的实现

    本项目提供了实现各种画笔功能的代码示例,虽然部分画笔功能可能已被注释,但用户可以根据自己的需求进行调整和定制。下面我们将详细讨论VC++中画笔的实现及其相关知识点。 首先,我们要了解GDI(Graphics Device ...

    画笔程序(包含截屏和屏幕画笔功能)

    《画笔程序与屏幕画笔功能的实现》 在信息技术领域,开发一款具有截屏和屏幕画笔功能的画笔程序是一项实用且有趣的任务。本文将深入探讨如何使用VS2008和C#编程语言来实现这样一个程序,并介绍其中涉及的关键知识点...

    行业文档-设计装置-五线画笔.zip

    软件驱动是五线画笔功能实现的关键。它与操作系统和图形应用程序进行交互,将五线画笔的输入转换为屏幕上的实际线条。此外,驱动程序还可能提供自定义设置,如压力敏感度、线条样式和颜色选择,使得艺术家可以根据...

    Opencv实现画笔功能

    2. 画笔功能实现 画笔功能是指在图像上绘制笔迹, Opencv提供了多种方式来实现画笔功能,如使用鼠标事件、使用轨迹平滑算法等。 3. 鼠标事件 鼠标事件是指鼠标在屏幕上的移动、点击、拖曳等操作。 Opencv提供了...

    运用vc++实现多功能画笔

    在本文中,我们将深入探讨如何运用VC++(Visual C++)这一强大的编程工具来实现一个具有多种功能的画笔程序。VC++是Microsoft开发的一种集成开发环境,它提供了丰富的库支持,包括MFC(Microsoft Foundation Classes...

    JAVA 鼠标画笔器功能

    在Java编程环境中,实现一个鼠标画笔器功能是一项有趣且实用的任务,它允许用户通过鼠标在画布上绘制图形或文字,而右键点击则可以清除已有的绘图。这个功能通常应用于各种图形编辑工具或者在线绘图软件。下面我们将...

    unity3d画笔画线功能

    unity3d中实现基本的铅笔,直线,画圆,画矩形和输入文字的功能,以及保存文件,打开文件的功能。其中计算直线夹角和判断鼠标是否在线上使用了NN视频聊天组件的功能(免费哦,在Assets\Plugins目录下,聊天功能参考...

    canvas实现马赛克画笔源码.zip

    canvas实现马赛克画笔源码.zipcanvas实现马赛克画笔源码.zipcanvas实现马赛克画笔源码.zipcanvas实现马赛克画笔源码.zipcanvas实现马赛克画笔源码.zipcanvas实现马赛克画笔源码.zipcanvas实现马赛克画笔源码....

    画笔带笔锋和输入框可换行功能

    在这个场景下,JavaScript将用于实现画笔功能,监听用户的鼠标或触摸事件,追踪其移动路径,并在Canvas元素上绘制线条。画笔的笔锋效果可以通过调整线条的宽度、颜色和透明度来模拟。同时,JavaScript也将处理输入框...

Global site tag (gtag.js) - Google Analytics