实现步骤:
1. 主界面
主要方法:
继承JFrame类,并获得其内容面板
getContentPane();
获得内容面板的画布对象:
Graphic g=dPane.getGrahpics();
调用重绘方法
repaint();
自动调用内部类paint()方法。实现重绘。
2. 添加按钮监听器
继承鼠标监听器和事件监听器。
重写actionPerformed()等方法
3. 自定义保存与打开按钮时响应的方法
主界面:MainFrame类
public class MainFrame extends JFrame {
JPanel cPane;
private List<Graph> List = new ArrayList<Graph>();
/**
* 构造方法,初始化界面
*/
public MainFrame() {
//窗体相关属性
super("画板_1.0");
setSize(1000, 700);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
//获得窗体内容面板
cPane = (JPanel) getContentPane();
cPane.setLayout(new BorderLayout());
JPanel mPane = new JPanel();
JPanel bPane = new JPanel();
JPanel dPane = new DrawPanel();
mPane.setBackground(Color.orange);
bPane.setBackground(Color.DARK_GRAY);
dPane.setBackground(Color.WHITE);
cPane.add(BorderLayout.SOUTH, mPane);
cPane.add(BorderLayout.WEST, bPane);
cPane.add(BorderLayout.CENTER, dPane);
// 菜单以及菜单子项
MenuBar bar = new MenuBar();
Menu m_file = new Menu("File");
Menu m_help = new Menu("Help");
MenuItem mi_new = new MenuItem("New");
MenuItem mi_open = new MenuItem("Open");
MenuItem mi_save = new MenuItem("Save");
m_file.add(mi_new);
m_file.add(mi_open);
m_file.add(mi_save);
bar.add(m_file);
bar.add(m_help);
// 添加菜单栏
setMenuBar(bar);
// 添加按钮
JButton btn_line = new JButton("直线");
JButton btn_curve = new JButton("曲线");
JButton btn_rectangle = new JButton("矩形");
JButton btn_oval = new JButton("圆");
JButton btn_color = new JButton("颜色");
bPane.setLayout(new GridLayout(15, 1));
bPane.add(btn_line);
bPane.add(btn_curve);
bPane.add(btn_rectangle);
bPane.add(btn_oval);
bPane.add(btn_color);
JButton btn_save = new JButton("保存");
JButton btn_open = new JButton("打开");
mPane.add(btn_save);
mPane.add(btn_open);
// 设置窗体可见
setVisible(true);
// 取的画布[
Graphics g = dPane.getGraphics();
// 创建按钮监听对象,并传入画板以及当前窗体
bl = new ButtonListener(g, dPane, this);
// 为按钮添加动作监听器
btn_line.addActionListener(bl);
btn_curve.addActionListener(bl);
btn_rectangle.addActionListener(bl);
btn_oval.addActionListener(bl);
btn_color.addActionListener(bl);
btn_save.addActionListener(bl);
btn_open.addActionListener(bl);
// 为画板添加鼠标监听器的方法
dPane.addMouseListener(bl);
dPane.addMouseMotionListener(bl);
}
class DrawPanel extends JPanel {
/**
* 重绘方法
*/
public void paint(Graphics g) {
super.paint(g);
if (null != bl) {
System.out.println("====-------------->"
+ bl.getGraphList().size());
// 取出队列中保存信息
for (int i = 0; i < bl.getGraphList().size(); i++) {
Graph graph = bl.getGraphList().get(i);
Color c = graph.getColor();
if (graph.getItem().equals("直线")
|| graph.getItem().equals("曲线")) {
g.setColor(c);
g.drawLine(graph.getX1(), graph.getY1(), graph.getX2(),
graph.getY2());
} else if (graph.getItem().equals("矩形")) {
g.setColor(c);
g.fillRect(graph.getX1(), graph.getY1(), graph.getX2(),
graph.getY2());
} else if (graph.getItem().equals("圆")) {
g.setColor(c);
g.fillOval(graph.getX1(), graph.getY1(), graph.getX2(),
graph.getY2());
}
}
}
}
}
/**
* 主方法
*
* @param args
*/
public static void main(String[] args) {
new MainFrame();
}
//自定义按钮监听器
private ButtonListener bl;
}
按钮监听类:ButtonListener类
public class ButtonListener extends MouseAdapter implements ActionListener {
private Graphics g;
private Color color = Color.black;
private JPanel dPane;
private int x1, y1, x2, y2;
private String item = "直线";
private MainFrame mf;
// 定义计数器变量
private int count = 0;
// 创建Graph类型的存储队列
private List<Graph> list = new ArrayList<Graph>();
// 定义保存的路径
String path = "src\\cn\\cjl\\study0428\\drawer\\save.txt";
// 传入画板以及要重绘的容器
public ButtonListener(Graphics g, JPanel dPane, MainFrame mf) {
this.mf = mf;
this.g = g;
this.dPane = dPane;
}
public void Fresh() {
// 调用MainFram的paint()方法
dPane.repaint();
}
/**
* 按钮监听响应方法
*/
public void actionPerformed(ActionEvent e) {
// 判断所选的按钮是否为颜色
if (e.getActionCommand().equals("颜色")) {
color = javax.swing.JColorChooser.showDialog(null, "颜色选择",
Color.black);
} else {
item = e.getActionCommand();
if (item.equals("保存")) {// 保存到文件
SaveOpen so = new SaveOpen();
try {
so.save(path, list);
} catch (IOException e1) {
e1.printStackTrace();
}
} else if (item.equals("打开")) {// 从文件中读取
System.out.println("====>");
SaveOpen so = new SaveOpen();
try {
list = so.open(path);
} catch (IOException e1) {
}
// 刷新
Fresh();
mf.repaint();
}
}
}
// 鼠标按下
public void mousePressed(MouseEvent e) {
// 判断为第一次点击,记录坐标
if (count == 0) {
x1 = e.getX();
y1 = e.getY();
if (!item.equals("曲线")) {
count++;
}
}
// 计数器的值为1,则绘制下列图形
else if (count == 1) {
// 记录第二次点击的坐标值
x2 = e.getX();
y2 = e.getY();
g.setColor(color);
if (item.equals("矩形")) {
g.fillRect(x1, y1, x2, y2);
addGraphList(color, item, x1, y1, x2, y2);
} else if (item.equals("直线")) {
g.drawLine(x1, y1, x2, y2);
addGraphList(color, item, x1, y1, x2, y2);
} else if (item.equals("圆")) {
g.fillOval(x1, y1, x2, y2);
addGraphList(color, item, x1, y1, x2, y2);
}
count--;
}
}
// 鼠标拖动,绘制曲线
public void mouseDragged(MouseEvent e) {
if (item.equals("曲线")) {
x2 = e.getX();
y2 = e.getY();
g.setColor(color);
g.drawLine(x1, y1, x2, y2);
addGraphList(color, item, x1, y1, x2, y2);
// 将最后一个点作为起始坐标
x1 = x2;
y1 = y2;
}
}
/**
* 将图形数据添加到队列中
*/
public void addGraphList(Color color, String item, int x1, int y1, int x2,
int y2) {
Graph graph = new Graph(color, item, x1, y1, x2, y2);
// 添加到队列中
list.add(graph);
}
/**
* 返回队列的方法
*/
public List<Graph> getGraphList() {
return list;
}
}
封装图像数据类:Graph类
public class Graph {
private int x1,y1,x2,y2;
private Color color;
private String item;
public Graph(Color color,String item,int x1,int y1,int x2,int y2){
this.color=color;
this.item=item;
this.x1=x1;
this.y1=y1;
this.x2=x2;
this.y2=y2;
}
public int getX1() {
return x1;
}
public void setX1(int x1) {
this.x1 = x1;
}
public int getY1() {
return y1;
}
public void setY1(int y1) {
this.y1 = y1;
}
public int getX2() {
return x2;
}
public void setX2(int x2) {
this.x2 = x2;
}
public int getY2() {
return y2;
}
public void setY2(int y2) {
this.y2 = y2;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
}
保存与打开按钮响应方法:SaveOpen类
public class SaveOpen {
/**
* 保存到文件
* @throws IOException
*/
public void save(String path,List<Graph> list) throws IOException{
//输出流
FileOutputStream fos=new FileOutputStream(path);
//将文件输出流包装成可写基本类型的流
DataOutputStream dos=new DataOutputStream(fos);
System.out.println("--------------------->"+list.size());
dos.writeInt(list.size());
for(int i=0;i<list.size();i++){
Graph graph=list.get(i);
//获取选择图像
String item=graph.getItem();
//定义一个图形变量
int type=0;
//得到坐标值
int x1=graph.getX1();
int y1=graph.getY1();
int x2=graph.getX2();
int y2=graph.getY2();
//判断为圆
if(item.equals("圆")){
type=2;
}
//判断为矩形
else if(item.equals("矩形")){
type=1;
}
//判断为曲线或者直线
else{
type=0;
}
dos.writeInt(type);
dos.writeInt(x1);
dos.writeInt(y1);
dos.writeInt(x2);
dos.writeInt(y2);
//写入颜色
int rgb=graph.getColor().getRGB();
dos.writeInt(rgb);
}
dos.flush();
fos.close();
}
/**
* 读取文件
* @throws IOException
*/
public List<Graph> open(String path) throws IOException{
List<Graph> list=new ArrayList<Graph>();
//输入流
InputStream fis=new FileInputStream(path);
DataInputStream dis=new DataInputStream(fis);
//长度
int len=dis.readInt();
System.out.println("===>"+len);
//循环输出
for(int i=0;i<len;i++){
int type=dis.readInt();
int x1=dis.readInt();
int y1=dis.readInt();
int x2=dis.readInt();
int y2=dis.readInt();
int rgb=dis.readInt();
Color color=new Color(rgb);
if(type==0){
String item="直线";
//实例化Graph对象
Graph graph=new Graph(color,item,x1,y1,x2,y2);
list.add(graph);
}
else if(type==1){
String item="矩形";
//实例化Graph对象
Graph graph=new Graph(color,item,x1,y1,x2,y2);
list.add(graph);
}
else if(type==2){
String item="圆";
//实例化Graph对象
Graph graph=new Graph(color,item,x1,y1,x2,y2);
list.add(graph);
}
}
dis.close();
return list;
}
}
分享到:
相关推荐
Java简单画板程序是一个基于Java编程语言开发的图形用户界面应用,主要目的是提供一个基础的绘图环境。这个程序允许用户在屏幕上绘制各种图形和线条,实现简单的绘画功能。通过这个程序,我们可以学习到以下几个Java...
本次课程设计的任务是开发一个“java简易画板”,旨在让学生通过实际操作来深入理解Java编程语言,特别是图形用户界面(GUI)的开发。这个项目将涵盖Java AWT(Abstract Window Toolkit)或Swing库的使用,用于创建...
这个“java简单画板”项目可能涉及到使用Java的Swing库来创建一个允许用户绘画的窗口。Swing是Java AWT(Abstract Window Toolkit)的一个扩展,提供了丰富的组件和更现代的外观。 首先,我们来看看Swing库中的关键...
Java 画板程序设计实验报告主要涉及以下几个关键知识点: ...以上就是关于“JAVA简单画板程序的设计实验报告”的主要知识点,涵盖了GUI设计、事件处理、图形绘制等多个方面,是一次综合性的编程实践。
总的来说,这个Java简单画板程序设计涉及了Java Swing的基本组件、布局管理、事件处理以及自定义绘图等核心概念。通过这个实验,学生可以深入理解Java GUI编程,并实践交互式图形应用程序的开发流程。
在这个JAVA简单画板程序设计实验中,我们主要涉及以下几个核心知识点: 1. **Java GUI编程**:使用Java Swing库来创建用户界面,包括JFrame、Panel、Button、Choice等组件。这些组件是构建图形用户界面的基本元素,...
【Java 简单画板程序设计实验报告】 在本次实验中,我们使用Java语言设计了一个功能丰富的画板程序,该程序允许用户进行画图、绘制特殊图形、更改颜色以及调整画笔大小。以下是该程序的设计思路和实现细节: ### ...
在本文中,我们将深入探讨如何使用Java编程语言来实现一个类似于Windows操作系统中的简易画板程序。这个Java小程序将提供基本的绘图功能,使用户能够通过鼠标或触控设备进行绘画创作。 首先,我们需要理解Java GUI...
本篇文章将深入探讨如何使用Java实现画板功能,并通过代码示例来展示如何画出简单的几何图形。 首先,我们需要了解`java.awt.Graphics`类,它是Java AWT的核心绘图类。这个类提供了一系列的方法,如`drawLine()`, `...
一个简单的Java画板可能包含以下关键部分: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SimplePaintBoard extends JFrame { private DrawingPanel panel; public...
本代码是编写的一个java简易小画板 计算机图形学
该实验报告介绍的是一个使用Java语言编写的简易画板程序设计。这个程序具有画图、绘制特殊图形(如直线、椭圆和矩形)、改变颜色和调整画笔大小的功能。设计过程中,主要分为四个步骤:界面设计、算法实现、运行调试...
在本例中,我们将探讨如何利用Java实现一个简单的画板程序,该程序允许用户绘制直线、长方形、椭圆和曲线。 1. **基础架构** - 主类`painter`通过`JFrame`创建了一个窗口,设置了背景颜色为白色,并添加了一个`...
【Java简易Windows画板】是一个基于Java编程语言开发的简单图形界面应用,主要目标是提供一个基础的绘图平台,让学生或初学者能够理解和实践GUI(图形用户界面)编程。这个项目可能作为期末考试的一部分,旨在帮助...
在Java编程语言中,开发一个画板程序是一...通过以上步骤,我们可以构建一个功能完备的画板程序,让用户体验到类似专业绘图软件的简单易用性。使用Java轻量级组件,我们可以确保程序在不同平台上具有一致的外观和行为。
Java GUI小画板是一个利用Java图形用户界面(GUI)技术开发的简单绘画应用程序。这个程序最初设计用于创新项目,特别是为了生成车牌字体并进行编辑。然而,随着项目的进展,这个方案最终被放弃。尽管如此,它依然...