package zxl.java0221;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
//任务:完成重绘,把画布上的图形以队列的形式遍历出来保存到内存中
//重绘是在drawpanel上,所以paint的方法要继承它;
//创建一个画板类
public class DrawFrame extends JFrame {
//给中间面板添加多个单选按钮,所以要分组,且要使用for循环
ButtonGroup group=new ButtonGroup();
//定义一个画布面板
private javax.swing.JPanel drawpanel;
//定义一个保存形状的队列对象
Queue<Shape> shapes=new Queue<Shape>();
//主方法
public static void main(String args[]){
//在主函数里面是由系统调用的,可以由类创建对象
DrawFrame df=new DrawFrame();
//对象实现窗体初始化的方法
df.initDrawFrame();
}
//窗体初始化的方法
public void initDrawFrame(){
//设置窗体标题和大小
this.setTitle("我的画板");
this.setSize(600,400);
//改变左上角的图片
//创建图标对象,该图标对象支持png格式
ImageIcon icon=new ImageIcon("ppp.png");
//创建一个图片对象得到该图标返回的图片
Image img=icon.getImage();
//在窗体上设置该图片
this.setIconImage(img);
//只有JPanel才有边框布局,图片没有
//给窗体分匡,画板调用创建画板的方法
JPanel toolpanel=this.createToolPanel();
JPanel colorpanel=this.createColorPanel();
JPanel centerpanel=this.createCenterPanel();
//将各个面板分别加到窗体上
this.add(toolpanel,BorderLayout.WEST);
this.add(centerpanel,BorderLayout.CENTER);
this.add(colorpanel,BorderLayout.SOUTH);
//给窗体设置菜单栏
//创建菜单对象
Menu menu1=new Menu("文件(F)");
Menu menu2=new Menu("编辑(E)");
Menu menu3=new Menu("查看(V)");
//设置菜单条
MenuBar menbar=new MenuBar();
this.setMenuBar(menbar);
menbar.add(menu1);
menbar.add(menu2);
menbar.add(menu3);
//在菜单"文件"下面再设置菜单
Menu menu11=new Menu("新建");
//在菜单"新建"下添加菜单项
MenuItem item111=new MenuItem("工具");
MenuItem item112=new MenuItem("格式");
menu11.add(item111);
menu11.addSeparator();
menu11.add(item112);
Menu menu12=new Menu("打开");
MenuItem item121=new MenuItem("颜色");
MenuItem item122=new MenuItem("字体");
menu12.add(item121);
menu12.addSeparator();
menu12.add(item122);
menu1.add(menu11);
//在menu11和menu12之间添加分隔符
menu1.addSeparator();
menu1.add(menu12);
//分别在菜单"编辑""查看"中设置菜单项
MenuItem item21=new MenuItem("保存");
MenuItem item22=new MenuItem("帮助");
MenuItem item31=new MenuItem("撤销");
MenuItem item32=new MenuItem("退出");
menu2.add(item21);
//在两者之间添加分隔符
menu2.addSeparator();
menu2.add(item22);
menu3.add(item31);
//在两者之间添加分隔符
menu3.addSeparator();
menu3.add(item32);
//设置可见
this.setVisible(true);
//关闭窗口是退出程序
this.setDefaultCloseOperation(3);
//添加画布,得到权限
Graphics g=drawpanel.getGraphics();
DrawListener dlis=new DrawListener(group,g,shapes);
drawpanel.addMouseListener(dlis);//添加鼠标监听器最好不要监听按钮,按钮用动作监听器
}
//实现分框的方法,工具面板
public javax.swing.JPanel createToolPanel(){
//创建工具面板对象
JPanel toolpane=new JPanel();
//设置工具面板的颜色
//toolpane.setBackground(Color.orange);
//
// //设置工具面板的图片,但是要先设置工具面板的布局
FlowLayout layout=new FlowLayout(FlowLayout.CENTER,0,0);//0,0表示垂直于水平间的距离
toolpane.setLayout(layout);
// //创建图标对象
// ImageIcon icon1=new ImageIcon("sss.jpg");
// //将图标放到标签对象上
// JLabel lab=new JLabel(icon1);
// //将标签添加到工具面板上
// toolpane.add(lab);
//先定义一个字符串数组
String[] s={"0","1","2","3","4","5","6","7","8","9","line","11","rect","13","oval","roundrect"};
for(int i=0;i<s.length;i++){
//JRadioButton rbut=new JRadioButton(s[i]);//记下单选按钮组的名字
JRadioButton rbut=new JRadioButton();
toolpane.add(rbut);
group.add(rbut);
//设置单选按钮的的背景颜色为透明
rbut.setOpaque(true);
//对单选按钮组贴图片
//创建标签对象
ImageIcon icon=new ImageIcon("images/draw"+i+".jpg");
ImageIcon icon1=new ImageIcon("images/draw"+i+"-1.jpg");
ImageIcon icon2=new ImageIcon("images/draw"+i+"-2.jpg");
ImageIcon icon3=new ImageIcon("images/draw"+i+"-3.jpg");
//在单选按钮上添加图标
rbut.setIcon(icon);//默认图标
rbut.setRolloverIcon(icon1);//鼠标放上去的图标
rbut.setPressedIcon(icon2);//鼠标按下去时的图标
rbut.setSelectedIcon(icon3);//鼠标被选中时的图标
//对单选按钮组设置动作命令
rbut.setActionCommand(s[i]);
if(i==10){
rbut.setSelected(true);
}
}
//设置工具面板的大小
toolpane.setPreferredSize(new java.awt.Dimension(70,80));
//返回toolpane
return toolpane;
}
//实现分框的方法,中间面板
public javax.swing.JPanel createCenterPanel(){
//创建中间面板对象
JPanel centerpane=new JPanel();
//新开辟一个画布面板给定义的drawpanel属性
drawpanel=new ChongHui();
//将画布面板添加到中间面板上
centerpane.add(drawpanel);
//设置画布面板的大小
drawpanel.setPreferredSize(new java.awt.Dimension(360,220));
//设置中间面板的布局
FlowLayout layout=new FlowLayout(FlowLayout.LEFT);
centerpane.setLayout(layout);
//给中间面板设置颜色
centerpane.setBackground(Color.GRAY);
//返回toolpane
return centerpane;
}
//实现分框的方法,颜色面板
public javax.swing.JPanel createColorPanel(){
//创建工具面板对象
JPanel colorpane=new JPanel();
// //给颜色面板设置布局
FlowLayout layout=new FlowLayout(FlowLayout.LEFT);
colorpane.setLayout(layout);
// //添加图片,先创建图标对象,该图标支持该图片格式
// ImageIcon icon=new ImageIcon("sss.jpg");
// //将图标添加到标签对象上
// JLabel lab=new JLabel(icon);
// //将标签添加到颜色面板上
// colorpane.add(lab);
//设置颜色面板的颜色
colorpane.setBackground(Color.pink);
//给颜色面板添加颜色按钮,因为要添加多个,所以用到for循环
//先定义一个颜色数组
Color[] colors={Color.BLACK,Color.blue,Color.CYAN,Color.gray,
Color.green,Color.magenta,Color.pink,Color.ORANGE,Color.RED};
//给颜色面板上的按钮添加监听器
//动作监听器是一个接口,不能new 一个对象,但只要实现其方法就能够了
//创建监听器对象
ActionListener alis=new ActionListener(){
public void actionPerformed(ActionEvent e){
//得到事件源对象(即动作监听器所操作的对象,在这里是被点击按钮对象)
Object obj=e.getSource();
//将事件源对象强行装化为按钮组对象,因为要绘制颜色
JButton but=(JButton) obj;
DrawListener.yanse=but.getBackground();
}
};
for(int i=0;i<colors.length;i++){
JButton jbut=new JButton();
jbut.setBackground(colors[i]);
colorpane.add(jbut);
jbut.setPreferredSize(new java.awt.Dimension(30,30));
//jbut.setOpaque(true);
//给按钮添加动作监听器
jbut.addActionListener(alis);
}
//设置颜色面板的大小
colorpane.setPreferredSize(new java.awt.Dimension(40,40));
//返回toolpane
return colorpane;
}
//在类中在定义类,只需要去掉public即可
class ChongHui extends JPanel{
//重写JPanel中用来绘制窗体的方法
public void paint(Graphics g){
//调用父类中的方法
super.paint(g);
System.out.println("绘制了");
//因为要保存形状,所以要将形状遍历出来
for(int i=0;i<shapes.getSize();i++){
//取出形状
Shape sh=shapes.get(i);
//绘制
sh.draw(g);
}
}
}
}
分享到:
相关推荐
在Java编程语言中,实现一个简单的Windows画图板是一个经典的练习,它可以帮助初学者更好地理解图形用户界面(GUI)的设计以及事件处理机制。这个项目通常会涉及到Java的Swing库,这是一个用于创建桌面应用程序的GUI...
画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码...
这个"基于qt实现的画图板"项目提供了一个基础的图形用户界面(GUI)应用,让用户能够进行基本的绘画操作,比如选择画笔、填充颜色、打开和保存图像。以下是关于这个项目的一些关键知识点和相关技术的详细解释: 1. ...
Java 画图板程序设计与实现 Java 画图板是使用 Java 语言编写的图形绘制程序,提供了基本的绘图功能,如画笔、直线、椭圆、矩形等,用户可以使用该程序绘制简单的图形。下面我们将对 Java 画图板程序进行详细的分析...
《Windows画图板:探索动态画图的魅力》 Windows画图板,作为一款简单易用的图形编辑软件,是微软操作系统内置的一个基础工具,尤其适合初学者和儿童进行简单的绘图活动。它提供了丰富的基本画图功能,让用户能够...
《VC++实现的简易画图板程序解析》 在计算机编程领域,开发一款类似Windows画图板的小程序是一项常见的实践项目,它可以帮助初学者更好地理解图形用户界面(GUI)编程和基本的图像处理技术。本篇文章将深入探讨一个...
在本文中,我们将深入探讨如何使用C#编程语言高仿Windows自带的画图板应用程序,实现各种绘图功能。这个项目旨在提供一个类似的用户界面和功能集,包括打开和保存图片、文字绘制、多种形状绘制、画刷和画笔操作、...
【标题】:“学生制作的画图板” 这个标题揭示了一个由学生开发的专门用于绘画的软件工具,很可能是为了帮助其他学生,特别是低年级的学弟学妹们完成作业中的绘画部分。这样的画图板可能包含了一系列基础和进阶的...
QT画图板是一个基于Qt库开发的图形用户界面应用程序,主要功能是提供一个交互式的画布,用户可以在上面进行绘图操作。对于初学者来说,QT画图板是一个极好的学习资源,它展示了Qt库在图形绘制和用户交互方面的强大...
在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来创建一个简易的画图板应用程序。MFC 是微软为Windows平台提供的一种C++类库,它简化了Windows API的使用,使得开发Windows应用程序更加高效...
在本文档中,我们将探讨如何使用QtCreator来编写一个画图板程序。画图板是一个基础且功能丰富的应用,常常作为学习图形用户界面(GUI)编程的一个入门项目。本文将重点介绍Qt的GUI框架、主要组件以及编程概念。 ###...
【标题】"仿XP画图板"是一款基于JAVA编程语言开发的应用程序,旨在模拟Windows XP操作系统中的经典画图工具。这个项目是为那些希望学习或熟悉GUI(图形用户界面)编程和事件处理的初学者设计的,同时也为用户提供了...
下面我们将深入探讨 Canvas API 以及如何使用这些资源来实现一个画图板。 首先,`index.html` 是网页的主文件,它定义了页面的基本结构。在这个项目中,`index.html` 应该包含一个 `<canvas>` 元素,它是整个画图板...
【描述】:“画图板源码示例画图板源码示例画图板源码示例”可能是重复强调了源码示例是关于画图板功能实现的,暗示这个示例可能涵盖了多个关键功能,如颜色选择、线条绘制、形状绘制、橡皮擦、撤销/重做等。...
【JAVA简易画图板】是一个基于Java编程语言开发的简单绘图应用程序,它为用户提供了一个基本的图形界面,用户可以通过这个界面进行简单的绘画操作。这个程序包含了一些基本的绘图功能,如绘制形状、使用铅笔工具以及...
在Android平台上,开发一个画图板应用涉及到许多关键的技术点,包括用户交互、图形渲染、数据存储以及资源管理等。以下是对"基于Android系统的画图板"这一主题的详细解析: 1. **用户交互**:Android系统提供了丰富...
Java画图板应用是一种基于Java编程语言开发的图形用户界面(GUI)程序,它提供了类似Windows操作系统内置画图板的功能。这个程序的核心是利用Java的Swing或JavaFX库来构建用户界面,允许用户进行基本的绘图操作,如...
在这个"java swing 画图板"项目中,开发者仿照了Windows操作系统中的“画图”程序,提供了一个基本的绘图环境。下面将详细讨论相关的Java Swing知识点。 1. **组件(Components)**:在Swing中,JFrame是窗口的基础...
在本文中,我们将深入探讨基于VC++的"vc画图板源码",这是一个用于创建图形界面应用程序的项目。这个项目的核心是利用MFC(Microsoft Foundation Classes)库,它是Microsoft为C++开发者提供的一个用于构建Windows...
在本项目中,我们探索的是一个简易的"画图板代码"实现,它允许用户绘制直线、矩形和椭圆。这个基础的图形界面应用程序旨在提供一个简单的平台,让用户能够进行基本的图形创作。我们将深入讨论这个画图板的核心功能和...