`
空城旧梦why
  • 浏览: 25368 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java 简单画板(一)

    博客分类:
  • Java
 
阅读更多

        老师讲完简单画图板的制作之后,剩下的一些功能要求我们自己来实现。之前一直没有时间来完成这个作业,今天正好有点时间来完成就来做了一下。我自己觉得这里面一些简单的图形的绘制都还是挺简单的,因为在Graphices这个抽象父类中都提供了对应的方法,而我在JPanel中得到的是这个抽象类的子类,在得到的子类中已经实现了这些图形的绘制,唯一觉得难一点的就是多边形,虽然也提供了对应的方法,但是不能实现绘制任意多边形,所以我得自己想办法来实现。

        关于实现绘制任意多边形,我的基本思路是:

                当我点下绘制任意多边形的按钮时,第一条边是和绘制直线一样的实现,但是我得标记当前绘制的边是不是第一条边,后面就是每次点击那么绘制一条从上次点击的点到当前的点的直线即可。

        我贴上我的实现代码,代码里写了一些注释。

画图板窗体类:

package com.why.draw;

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

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

/**
 * 定义画板的窗体类,继承JFrame
 * 
 * @author why
 * 
 */
public class DrawFrame extends JFrame {

	private static final long serialVersionUID = 1L;
	private String graphName = "Line";

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DrawFrame drawFrame = new DrawFrame();
		drawFrame.init();
	}

	public void init() {
		// JFrame的默认布局方式是边框布局
		// 设置窗体的标题
		this.setTitle("我的画板");
		// 设置窗体大小
		this.setSize(new Dimension(800, 600));
		// 设置窗体的默认显示位置,当前设置为水平和竖直居中显示
		this.setLocationRelativeTo(null);
		// 设置点击关闭的按钮的响应动作
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// 创建JPanel容器对象
		JPanel drawPanel = new JPanel();
		// 设置画图区域的背景色
		drawPanel.setBackground(Color.WHITE);
		// 添加画图的区域
		this.add(drawPanel, BorderLayout.CENTER);
		// 调用创建上面工具栏的按钮
		createToolsPanel();

		// 设置窗体可见
		this.setVisible(true);
		/**
		 * 给绘图区域添加鼠标的监听器。
		 * 这里注意要得到JPanel的Graphics对象必须要在设置窗体可见之后才能取得,否则得不到该对象出现空指针的异常
		 */
		PanelListener panelListener = new PanelListener(this, drawPanel.getGraphics());
		drawPanel.addMouseListener(panelListener);
	}

	private void createToolsPanel() {
		JPanel toolsPanel = new JPanel();// JPanel的默认布局方式是流式布局
		String[] array = { "Line", "Rect", "Oval", "RoundRect", "Polygon",
				"FillRect", "FillOval" };
		// 实例化一个按钮监听器对象
		ButtonListener l = new ButtonListener();
		for (int i = 0; i < array.length; i++) {
			JButton btn = new JButton(array[i]);
			// 给按钮添加监听器
			btn.addActionListener(l);
			// 向上面添加按钮组件
			toolsPanel.add(btn);
		}

		// 将工具容器添加到JFrame中
		this.add(toolsPanel, BorderLayout.NORTH);
	}

	private class ButtonListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			graphName = e.getActionCommand();
			System.out.println("按下的按钮是" + graphName);
		}
	}

	public String getGraphName() {
		return graphName;
	}

	public void setGraphName(String graphName) {
		this.graphName = graphName;
	}

}

 画图区域监听器类:

package com.why.draw;

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class PanelListener implements MouseListener {

	private int x1;
	private int y1;
	private int x2;
	private int y2;
	private boolean flag;// 用以标记在按下绘制多边形按钮的时候是不是绘制第一条边
	private DrawFrame drawFrame;// 画板窗体类
	private Graphics graphics;// 绘图区域的图形上下文

	public PanelListener(DrawFrame drawFrame, Graphics graphics) {
		this.drawFrame = drawFrame;
		this.graphics = graphics;
		this.flag = false;
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println("当鼠标单击事件源的时候响应的方法");
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println("当鼠标进入事件源的时候执行的方法");
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println("当鼠标离开事件源的时候执行的方法");
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println("当鼠标在事件源上按下的时候执行的方法");
		if (drawFrame.getGraphName().equals("Polygon") && !flag) {// 如果按下的是绘制多边形按钮
			x1 = e.getX();
			y1 = e.getY();
			flag = true;
		} else if (!drawFrame.getGraphName().equals("Polygon")) {// 如果按下的不是绘制多边形按钮
			x1 = e.getX();
			y1 = e.getY();
		}
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println("当鼠标在事件源上释放的时候执行的方法");
		System.out.println(e.getX() + " " + e.getY());
		x2 = e.getX();
		y2 = e.getY();
		String graphName = drawFrame.getGraphName();
		
		if (graphName.equals("Line")) {
			graphics.drawLine(x1, y1, x2, y2);
			flag = false;
		} else if (graphName.equals("Rect")) {
			graphics.drawRect(x1, y1, x2 - x1, y2 - y1);
			flag = false;
		} else if (graphName.equals("Oval")) {
			graphics.drawOval(x1, y1, x2 - x1, y2 - y1);
			flag = false;
		} else if (graphName.equals("RoundRect")) {
			graphics.drawRoundRect(x1, y1, x2 - x1, y2 - y1, 15, 15);
			flag = false;
		} else if (graphName.equals("Polygon")) {
			graphics.drawLine(x1, y1, x2, y2);
			x1 = x2;
			y1 = y2;
		} else if (graphName.equals("FillRect")) {
			graphics.fillRect(x1, y1, x2 - x1, y2 - y1);
			flag = false;
		} else if (graphName.equals("FillOval")) {
			graphics.fillOval(x1, y1, x2 - x1, y2 - y1);
			flag = false;
		}
	}

}

 这个效果图

 

  • 大小: 119.3 KB
4
0
分享到:
评论

相关推荐

    java简单画板程序

    Java简单画板程序是一个基于Java编程语言开发的图形用户界面应用,主要目的是提供一个基础的绘图环境。这个程序允许用户在屏幕上绘制各种图形和线条,实现简单的绘画功能。通过这个程序,我们可以学习到以下几个Java...

    Java实现画板(Java小程序 模仿Win系统画板)

    在本文中,我们将深入探讨如何使用Java编程语言来实现一个类似于Windows操作系统中的简易画板程序。这个Java小程序将提供基本的绘图功能,使用户能够通过鼠标或触控设备进行绘画创作。 首先,我们需要理解Java GUI...

    java简单画板

    【Java简单画板】是一款基于Java编程语言开发的轻量级画图软件,它提供了基本的绘图功能,包括绘制直线、矩形和椭圆,适用于进行简单的图形创作和涂鸦。这款工具的设计理念是易用性和实用性,使得用户无需复杂的操作...

    java画板 比较简单的画板

    一个简单的Java画板可能包含以下关键部分: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SimplePaintBoard extends JFrame { private DrawingPanel panel; public...

    java简易画板

    本次课程设计的任务是开发一个“java简易画板”,旨在让学生通过实际操作来深入理解Java编程语言,特别是图形用户界面(GUI)的开发。这个项目将涵盖Java AWT(Abstract Window Toolkit)或Swing库的使用,用于创建...

    java画板代码 可以画图形

    下面是一个简单的Java代码示例,演示如何创建一个画板并绘制一个矩形: ```java import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Color; import java.awt.Graphics; public class ...

    java简易小画板

    本代码是编写的一个java简易小画板 计算机图形学

    java 实现 画板程序

    在本例中,我们将探讨如何利用Java实现一个简单的画板程序,该程序允许用户绘制直线、长方形、椭圆和曲线。 1. **基础架构** - 主类`painter`通过`JFrame`创建了一个窗口,设置了背景颜色为白色,并添加了一个`...

    java简易Windows画板

    【Java简易Windows画板】是一个基于Java编程语言开发的简单图形界面应用,主要目标是提供一个基础的绘图平台,让学生或初学者能够理解和实践GUI(图形用户界面)编程。这个项目可能作为期末考试的一部分,旨在帮助...

    Java实现简单的画板

    在本文中,我们将深入探讨如何使用Java编程语言来实现一个简单的画板应用程序。这个程序允许用户在图形用户界面上绘制各种基本形状,如线条、矩形、圆形等,从而提供了一个基本的绘画环境。 首先,我们需要引入Java...

    javaGUI小画板

    Java GUI小画板是一个利用Java图形用户界面(GUI)技术开发的简单绘画应用程序。这个程序最初设计用于创新项目,特别是为了生成车牌字体并进行编辑。然而,随着项目的进展,这个方案最终被放弃。尽管如此,它依然...

    java的一个画画板

    在Java编程语言中,开发一个“画画板”项目是一个典型的图形用户界面(GUI)应用程序的实例,它允许用户通过鼠标或其他输入设备绘制图形并进行交互。这个“画画板Demo”可能包含了基本的绘图功能,如绘制不同形状,...

    java画板大作业

    Java画板大作业通常是指在Java编程环境下,利用Java AWT(Abstract Window Toolkit)或Swing库创建一个图形用户界面(GUI),实现一个简单的画板应用程序。这个项目可以帮助初学者理解面向对象编程、事件处理、图形...

    java swing简单画板

    在这个"java swing简单画板"项目中,开发者利用Swing构建了一个基础的绘图应用,用户可以在此画板上执行常见的绘图操作,如绘制直线、圆、矩形、曲线,并使用橡皮擦进行擦除。下面我们将详细讨论这些知识点。 **1. ...

    JAVA画板(改进版)

    【JAVA画板(改进版)】是一个专为初学者设计的JAVA程序,它在原有的基础上进行了功能增强,使得用户能够体验到更为丰富的图形绘制和编辑功能。这个项目旨在帮助学习者更好地理解和应用JAVA编程语言,特别是图形用户...

    java实现画板的基本功能程序

    在Java编程语言中,开发一个画板程序是一...通过以上步骤,我们可以构建一个功能完备的画板程序,让用户体验到类似专业绘图软件的简单易用性。使用Java轻量级组件,我们可以确保程序在不同平台上具有一致的外观和行为。

    java小画板

    "Java小画板"是一个基于Java编程语言开发的简单绘图应用程序。这个项目的主要目标是为用户提供一个基础的图形绘制平台,类似于Windows操作系统中的“画图”程序,用于学习和交流Java图形用户界面(GUI)编程技术。源...

    java 网络绘画板

    这是一个基于java socket连接实现的简单GUI网络画图白板程序,项目文件中app package中的MultiServer.java是服务端监听程序的主程序;Client.java是客户端启动程序。运用面向对象程序设计思想,基于java的GUI、套接字...

    java课程设计大作业<画板图像编辑器>

    本项目名为“画板图像编辑器”,是一个基于Java实现的简易图像处理工具,旨在帮助初学者熟悉Java编程并实践GUI(图形用户界面)应用的开发。这个图像编辑器虽然功能相对简单,但包含了基本的图像操作,如截图和保存...

    用JAVA编写的画板程序

    这个标题揭示了一个使用Java编程语言开发的图形用户界面应用,它模仿了Windows操作系统中的“画板”工具。在计算机科学中,画板程序通常指的是允许用户通过鼠标或其他输入设备进行图形绘制的应用。这种程序常用于...

Global site tag (gtag.js) - Google Analytics