一.简单画图板
1.首先是一个简单的可以画直线的画图板需要用到监听器和画布
新组件:
靠鼠标的移动产生直线:MouseListener
需要在画布上作图:Graphics
关键字:this用于在构造方法中引用满足指定参数类型的构造器,但只能引用一个构造方法且必须位于开始
2. 鼠标监听器:
Mouse1类: //定义一个Mouse1类实现鼠标监听器中的抽象方法
public class Mouse1 implements MouseListener,MouseMotionListener{
//因为和主函数中的画板联系,所以不可用Graphics g=new Graphics();
private Graphics g;
int x1,y1,x2,y2;
//传参:需要在画布上画线,所以需要传参
public Mouse1(Graphics g){
this.g=g;
}
//鼠标被按下时
public void mousePressed(MouseEvent e){
x1=e.getX();//得到第一个点的横坐标
y1=e.getY();//得到第一个点的纵坐标
}
//鼠标拖动,产生边画边现实的效果,因为要擦去拖动过程产生的线,所以要用背景色重绘一遍
//利用临时变量储存终点
private int tempx=0,tempy=0;
public void mouseDragged(MouseEvent e){
x2=e.getX();//得到第二个点的横坐标
y2=e.getY();//得到第二个点的纵坐标
//画直线
g.drawLine(x1, y1, x2, y2);
//利用临时变量绘制背景线,详细代码与画彩线类似
tempx=shape.x2;
tempy=shape.y2;
}
//鼠标被释放后
public void mouseReleased(MouseEvent e){
}
主函数:
(画布位于窗体上方,需申请得到)
//申请得到画布
Graphics gr=jf2.getGraphics();
//声明鼠标监听器
Mouse1 mouse1=new Mouse1(gr);
//添加鼠标监听器
jf2.addMouseListener(mouse1);
jf2.addMouseMotionListener(mouse1);
二.可以选择图形的画板
1.新组件
动作监听器:ActionListener
颜色选项:Color c=new Color(66,6,2);
数学函数:如x3=Math.min(x1, x2);//x1,x2的最小值
2.通过选择不同的按钮画出不同的形状:动作监听器
ActionChoose类: //通过ActionChoose实现动作监听器
public class ActionChoose implements ActionListener{
//通过按钮的不同来得到不同的画图标识
private String command;
//用getCommand方法得到类型
public String getCommand()
{
return command;
}
public void actionPerformed(ActionEvent e){
//根据不同的按钮类型赋给command不同的值进行画线的判断
if(e.getActionCommand().equals("直线"))
{
command = "line";
}
````
}
}
主函数:
//声明动作选择监听器
ActionChoose acc=new ActionChoose();
//设置图形按钮
JRadioButton line=new JRadioButton("直线");
//添加监听器
line.addActionListener(acc);
//在Mouse1中需要根据ActionChoose的选择进行判断所画图形形状
Mouse1 mouse1=new Mouse1(gr,acc);
Mouse1类:
public class Mouse1 implements MouseListener{
private Graphics g;
private ActionChoose ac;
int x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x7,y7;
//传参
public Mouse1(Graphics g,ActionChoose ac){
this.g=g;
this.ac = ac;
}
//根据加到按钮监听器对象得到选择按钮的类型进行判断画图
String nValue = ac.getCommand();
//直线
if(nValue.equals("line"))
g.drawLine(x1, y1, x2, y2);
}
三.关于画图
扩展思维
·线可以组成三角形,箭头等;
·多个平面图形的重复累加可形成立体图形;
·多个线条可形成立体图形;
·通过对图形颜色的控制可以画出立体效果;
四.关于画图板的重绘
在改变窗体大小或移动除桌面时,图形会消失。这是因为所绘图形保存在缓存而不是内存中,所以,改变窗体后,只显示窗体,不显示图形。在JFrame中,有paint方法,系统会自动调用,因此,如果想重绘图形,则要重写paint方法,是指可以画出之前的图形,即遍历所画图形。利用队列保存图形,再利用paint重绘。 //注意写在JFrame中
public void paint(Graphics g){
//重写窗体,否则不显示窗体
super.paint(g);
for(int i=0;i<shapelist1.size();i++){
Shape shape=shapelist1.get(i);
g.getColor();
shape.draw(g);
}
//每放开鼠标一次,保存一次
public void mouseReleased(MouseEvent e){
//要在内部定义,否则只保存最后一个图形
Shape shape = new Shape();
shape.x1=x1;
shape.y1=y1;
shape.x2=e.getX();
shape.y2=e.getY();
shape.color = jcc.getColor();
shape.type=nValue;
//保存图形
shapelist.add(shape);
}
- 大小: 44.1 KB
分享到:
相关推荐
在本文中,我们将深入探讨BMP格式的解析与保存,并结合画图板的重绘功能来讲解这一主题。 首先,我们需要理解BMP文件的结构。BMP文件分为两部分:文件头和图像数据。文件头包含文件信息,如文件大小、图像宽度、...
通过重写paintComponent方法,可以确保每次窗口重绘时都能正确显示当前的绘图状态。 对于保存和加载功能,Java提供了文件I/O流类,如FileInputStream和FileOutputStream,用于读写文件。图像数据可以被序列化为二...
paintEvent是一个在QWidget中定义的事件处理函数,当组件需要重绘时,它会自动被调用。在绘图应用中,这个函数通常会被用来绘制图像。 #### QImage与QPainter QImage是一个图像表示类,用于处理图像数据。QPainter...
在C#编程环境中,开发一个画图板是一个常见的练习,用于学习图形用户界面(GUI)设计和绘图操作。这个“C# 画图板 源码”项目,适用于.NET Framework 1.1和2.0,展示了如何利用C#语言实现一个基本的绘画应用程序。...
2. 绘图处理:在OnPaint()消息处理函数中,当窗口需要重绘时,会调用BeginPaint()和EndPaint()来获取CDC对象,并在其中进行绘图操作。 3. 用户交互:程序需要响应用户的鼠标和键盘事件,如WM_LBUTTONDOWN、WM_...
这可能是通过设置一个特定的颜色(如背景色)和不透明度,然后在指定区域内重绘,以达到擦除效果。 5. **颜色选择**:用户可以改变画笔颜色,这需要实现颜色选择器,可能是一个颜色对话框,用户选择颜色后,将所选...
这个函数会在视图需要重绘时被调用,我们可以在这里使用GDI (Graphics Device Interface) 来绘制图形。GDI 提供了一系列的函数,如MoveTo、LineTo、Rectangle、Ellipse 和Polyline,它们分别用于绘制线条、矩形、...
10. **性能优化**:对于大规模的绘图操作,可能需要关注性能优化,如减少不必要的重绘,利用缓存技术提高效率,或者采用异步处理以避免阻塞用户界面。 以上就是关于"简单画图板的设计"的一些核心知识点。实际实现时...
在这个程序中,我们将实现基本的绘图功能,包括重绘、绘制点、线、矩形和椭圆,并支持拖拽预览以及填充色和画笔颜色的选择。 首先,我们需要创建一个MFC对话框应用程序。在Visual Studio中,选择"File" -> "New" ->...
你需要定义消息映射来处理特定的消息,如WM_PAINT消息用于窗口重绘,WM_LBUTTONDOWN和WM_LBUTTONUP用于处理鼠标点击。 7. **文件I/O**:为了实现打开和保存BMP文件的功能,你需要使用CFile类或者更高级的fstream来...
2. **OnPaint事件**:当窗口需要重绘时,系统会发送WM_PAINT消息,通过覆盖CWnd的OnPaint函数来处理图形的绘制。 3. **CDC类**:设备上下文(Device Context,DC)是Windows图形模型的核心,CDC类封装了与设备相关...
Java简单swing程序,模拟实现windows画图板的功能,实现规则、不规则图形的绘制,颜色填充,撤销重绘等功能
在C#编程环境中,开发一个简单的画图板是一项常见的练习,可以帮助初学者更好地理解图形用户界面(GUI)的创建和事件处理。这个源码提供了一个基础的画图应用,允许用户绘制矩形、曲线和椭圆,并且可以选择系统提供...
4. **重绘机制**:为了保证画图板的实时性,开发者可能利用了JAVA的重绘机制,如`repaint()`方法,当画布上的内容发生变化时,会自动调用该方法进行更新,确保用户能即时看到画图的效果。 5. **图像处理**:除了...
6. **擦除与重绘**: 为了实现擦除功能,可以创建一个白色的Pen,然后在擦除区域调用DrawRectangle方法。但请注意,Windows Forms的Graphics对象通常不会自动清除画布,所以可能需要在Paint事件中实现自己的清除...
5. **OnPaint消息**:当窗口需要重绘时,Windows会发送WM_PAINT消息。我们需要重载CWnd的OnPaint成员函数,来实现自定义的绘图逻辑。 6. **CPaintDC类**:为了在窗口上绘图,我们将使用CPaintDC类,它是设备上下文...
这个函数会在窗口需要重绘时被调用,开发者可以在这里实现各种绘图逻辑。例如,用户可能会使用鼠标进行绘制,程序需要捕获WM_MOUSEMOVE和WM_LBUTTONDOWN等消息,根据鼠标的当前位置在画布上添加线条或形状。 此外,...
该画图板的主要功能包括但不限于图形的绘制、线型与颜色的设置、图形文件的重绘及保存等。 #### MFC与VC++简介 1. **VC++6.0:** - VC++6.0是微软发布的一款在Windows平台上的强大C++编译器。 - 它提供了高级的...
在Android平台上,开发一款画图板应用是一种常见的需求,它可以让用户进行自由绘画、涂鸦或者进行图形设计。本文将详细解析"android画图板"这个主题,介绍如何在Android中实现一个基本的画线功能,并探讨两种不同的...