package MiniDrawPad;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
public class MiniDrawPad extends JFrame //主类,扩展了JFrame类,用来生成主界面
{
private ObjectInputStream input;
private ObjectOutputStream output; //定义输入输出流,用来调用和保存图像文件
private JButton choices[]; //按钮数组,存放以下名称的功能按钮
private String names[]={"","","","Pencil","Line", "Rect", "fRect","Oval", "fOval","Circle","fCircle", "RoundRect",
"frRect","Rubber","Color", "Stroke","Word" /*画图板上面有的基本的几个绘图单元按钮*/
};
private String styleNames[]={
" 宋体 " , " 隶书 " , " 华文彩云 " , " 仿宋_GB2312 " , " 华文行楷 " ,
" 方正舒体 " , " Times New Roman " , " Serif " , " Monospaced " ,
" SonsSerif " , " Garamond "
}; //可供选择的字体项
//当然这里的灵活的结构可以让读者自己随意添加系统支持的字体
private Icon items[];
private String tipText[]={
//这里是鼠标移动到相应按钮上面上停留时给出的提示说明条
//读者可以参照上面的按钮定义对照着理解
"Draw a new picture",
"Open a saved picture",
"Save current drawing",
"用铅笔随心画",
"画一条直线",
"画空心的矩形",
"画一个用当前颜色填充的矩形",
"画一个空心椭圆",
"画一个用当前颜色填充的椭圆",
"画一个圆",
"画一个带填充色的圆",
"画一个圆角矩形",
"画一个带填充色的圆角矩形",
"橡皮擦工具",
"选择当前绘画的颜色",
"设置线条的粗细",
"在鼠标点击位置输入文字"
};
Icon wei=new ImageIcon("wang.gif") ;//介绍我的
Icon icon=new ImageIcon("mm.gif") ;//说明的ICON
Icon icon1=new ImageIcon("nn.gif") ;//输入文字的ICON
JToolBar buttonPanel ; //定义按钮面板
private JLabel statusBar; //显示鼠标状态的提示条
private DrawPanel drawingArea; //画图区域
private int width=840,height=550; //定义画图区域初始大小
drawings[] itemList=new drawings[5000]; //用来存放基本图形的数组
private int currentChoice=3; //设置默认画图状态为随笔画
int index=0; //当前已经绘制的图形数目
private Color color=Color.black; //当前画笔颜色
int R,G,B; //用来存放当前色彩值
int f1,f2; //用来存放当前字体风格
String style1; //用来存放当前字体
private float stroke=1.0f; //设置画笔粗细,默认值为1.0f
JCheckBox bold,italic; //定义字体风格选择框
//bold为粗体,italic为斜体,二者可以同时使用
JComboBox styles;
public MiniDrawPad() //构造函数
{
super("画板测试版 1.00");
JMenuBar bar=new JMenuBar(); //定义菜单条
JMenu fileMenu=new JMenu("文件");
fileMenu.setMnemonic('F');
//新建文件菜单条
JMenuItem newItem=new JMenuItem("新建");
newItem.setMnemonic('N');
newItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
newFile(); //如果被触发,则调用新建文件函数段
}
}
);
fileMenu.add(newItem);
//保存文件菜单项
JMenuItem saveItem=new JMenuItem("保存");
saveItem.setMnemonic('S');
saveItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
saveFile(); //如果被触发,则调用保存文件函数段
}
}
);
fileMenu.add(saveItem);
//打开文件菜单项
JMenuItem loadItem=new JMenuItem("打开");
loadItem.setMnemonic('L');
loadItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
loadFile(); //如果被触发,则调用打开文件函数段
}
}
);
fileMenu.add(loadItem);
fileMenu.addSeparator();
//退出菜单项
JMenuItem exitItem=new JMenuItem("退出");
exitItem.setMnemonic('X');
exitItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
System.exit(0); //如果被触发,则退出画图板程序
}
}
);
fileMenu.add(exitItem);
bar.add(fileMenu);
/*设置颜色菜单条
JMenu colorMenu=new JMenu("颜色");
colorMenu.setMnemonic('C');
//选择颜色菜单项
JMenuItem colorItem=new JMenuItem("选择颜色");
colorItem.setMnemonic('O');
colorItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
chooseColor(); //如果被触发,则调用选择颜色函数段
}
}
);
colorMenu.add(colorItem);
bar.add(colorMenu);
//设置线条粗细菜单条
JMenu strokeMenu=new JMenu("粗细");
strokeMenu.setMnemonic('S');
//设置线条粗细菜单项
JMenuItem strokeItem=new JMenuItem("增加粗度");
strokeItem.setMnemonic('K');
strokeItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
setStroke();
}
}
);
strokeMenu.add(strokeItem);
bar.add(strokeMenu);*/
//设置提示菜单条
JMenu helpMenu=new JMenu("帮助");
helpMenu.setMnemonic('H');
//设置提示菜单项
JMenuItem aboutItem=new JMenuItem("关于mini画板!");
aboutItem.setMnemonic('A');
aboutItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(null,
"您现在使用的是王伟开发的画板 1.00测试版\n华东交通大学05软件工程多媒体3班\nQQ:554684729",
" 画板开发介绍",
JOptionPane.INFORMATION_MESSAGE ,wei);
}
}
);
helpMenu.add(aboutItem);
//设置帮助主题
JMenuItem howItem=new JMenuItem("帮助主题");
howItem.setMnemonic('W');
howItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(null,
"可以使用它打开已保存的图像文件\n也可以将画的图像保存起来\n该画板的使用比较简单,用它可以画出各种\n基本的图形,不足之处望指出,以待改进!",
" 画板使用介绍",
JOptionPane.INFORMATION_MESSAGE ,icon);
}
}
);
helpMenu.add(howItem);
bar.add(helpMenu);
items=new ImageIcon[names.length];
//创建各种基本图形的按钮
drawingArea=new DrawPanel();
choices=new JButton[names.length];
buttonPanel = new JToolBar( JToolBar.VERTICAL ) ;
buttonPanel = new JToolBar( JToolBar.HORIZONTAL) ;
ButtonHandler handler=new ButtonHandler();
ButtonHandler1 handler1=new ButtonHandler1();
//导入我们需要的图形图标,这些图标都存放在与源文件相同的目录下面
for(int i=3;i<choices.length;i++)
{//items[i]=new ImageIcon( MiniDrawPad.class.getResource(names[i] +".gif"));
//如果在jbuilder下运行本程序,则应该用这条语句导入图片
items[i]=new ImageIcon(names[i] + ".gif");
//默认的在jdk或者jcreator下运行,用此语句导入图片
choices[i]=new JButton("",items[i]);
绘图JAVA
5星 · 超过95%的资源 需积分: 0 22 浏览量
更新于2008-01-13
1
收藏 51KB RAR 举报
在JAVA编程语言中,绘图是一项重要的功能,它允许开发者创建复杂的图形用户界面(GUI)或者进行数据可视化。"MiniDrawPad"很可能是一个简单的JAVA绘图应用程序,它为用户提供了一个平台来绘制图形、线条、形状等。让我们深入探讨JAVA绘图的相关知识点。
### 1. JAVA绘图基础
JAVA中的绘图主要依赖于`java.awt`和`javax.swing`这两个包。`java.awt`包含了基本的图形组件和绘图API,如`Graphics`类,用于在组件上绘制图形。`javax.swing`则提供了更高级的组件和布局管理器,可以创建更美观且功能丰富的GUI。
### 2. `Graphics`类
`Graphics`类是所有JAVA绘图操作的核心。它提供了一系列方法来绘制线、填充形状、设置颜色、字体等。例如,`drawLine()`用于画线,`fillRect()`用于填充矩形,`setColor()`用于设置颜色,`setFont()`用于设置字体样式。
### 3. 绘图组件
在JAVA GUI中,通常使用`Canvas`或`JPanel`作为绘图表面。`Canvas`是`java.awt`包中的一个组件,可以直接在其上进行绘图。而`JPanel`是`javax.swing`包中的组件,可以自定义其`paintComponent(Graphics g)`方法来进行绘图。
### 4. 绘图事件处理
为了响应用户的交互,如鼠标点击或拖动,我们需要注册监听器。`MouseListener`和`MouseMotionListener`是常用的两个接口,可以捕获鼠标按下、释放、移动等事件。
### 5. 图形状态
JAVA绘图API支持图形状态的概念,包括当前的颜色、线型、填充模式等。这些状态可以通过`Graphics`对象的属性进行设置,并会影响后续的绘图操作。
### 6. 图形坐标系统
JAVA绘图的坐标系统默认原点位于组件的左上角,x轴向右增长,y轴向下增长。可以通过`translate()`方法改变坐标系的原点。
### 7. 重绘机制
当组件需要更新显示时,会调用`repaint()`方法触发重绘。JAVA会自动调用`paint()`或`paintComponent()`方法来刷新组件。
### 8. 图形旋转与缩放
通过`AffineTransform`类,我们可以实现图形的旋转、缩放、平移等变换操作。这个类可以改变`Graphics2D`对象的坐标映射,从而实现复杂的图形操作。
### 9. 图像处理
JAVA也提供了处理图像的功能,如加载、显示和修改`BufferedImage`对象。`ImageIO`类用于读取和写入图像文件,`Graphics2D`类则可以将图像绘制到组件上。
### 10. 高级绘图特性
`Graphics2D`是`Graphics`的子类,提供了更多的绘图特性,如抗锯齿、渲染质量和路径操作。它支持绘制矢量图形,这意味着图形的清晰度不会因放大而降低。
"MiniDrawPad"可能是一个基于JAVA的简单绘图工具,它利用了JAVA提供的绘图API来创建用户可以交互的绘图界面。通过学习并理解上述知识点,你可以构建出自己的JAVA绘图应用,实现更多功能和效果。
琨景服务
- 粉丝: 1
- 资源: 7
最新资源
- 西门子S7-1200PLC结构化编程5轴完整的伺服项目 ,包含plc程序、配套的威纶通触摸屏程序、配套的cad电气图纸 可以实现以下功能,规格有: 1.三轴机械手X轴-Y轴-Z轴联动取放料PTO脉冲
- TB无人直播九月份最新玩法,日不落直播间,不风控,日稳定躺赚1000+!.mp4
- TikTok涨粉全攻略:掌握算法逻辑,精准发布,粉丝数飙升百万.mp4
- Tk好物分享提升篇:商品橱窗开通指南,选品技巧大公开,素材获取方法揭秘.mp4
- 计算机体系结构实训:基于微程序控制器的MIPS多周期处理器设计及测试
- 24年-软开-期末大作业要求.doc
- 西门子1200PLC以PTO脉冲方式控制伺服电机,步进电机的功能块程序 西门子plc标准模板S7-1200PLC脉冲控制伺服程序案例 内独有配套电路图cad 包含两套程序,第一套程序是用梯形图写的
- TK虚拟资料变现实操:从下载部署到账号运营,解锁变现新路径.mp4
- 广州大学数据结构实验二代码包
- 国庆风口项目,利用ai漫改渐变国庆头像,日变现四位数,可一键生成风口....mp4
- 基于深度置信网络(DBN)的数据回归预测 多输入单输出 出图真实值与预测值对比图,DBN训练损失图 误差指标包括MAE、ME、RMSE、R2
- 家居装饰视频必备!轻奢风竖屏背景素材包,含清晰、中间虚化、全屏虚化.mp4
- 黑科技自动生成 一刀不剪 几十秒一个原创作品.mp4
- 多光谱近红外场景下的小麦、玉米、水稻秧苗图像分类数据集【已标注,约900张数据】
- 自动驾驶多传感器联合标定系列之IMU到车体坐标系的标定工程 , 本在已知GNSS GPS到车体坐标系的外参前提下,根据GNSS GPS的定位信息与IMU信息完成IMU到GNSS GPS 的外参标定,并
- 快手&抖音-小程序变现 图文运用小游戏项目打造矩阵打法与游戏发行人.mp4