初始画图板的创建:
1.创建一个队列接口ListInterface 和一个队列应用类ListImp
2.创建一个画图板界面类DrawUI,在其中用一个队列ListImp<Shape>来保存形状对象。创建面板对象UI,使用UI调用初始化函数init()。在init()方法中设置界面的各种属性,以及添加组件。添加“选择颜色”按钮,设置按钮的事件监听器,调用弹出颜色选择器的方法。重写绘制窗体的方法。
代码如下:
package 画板_颜色_重绘;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
//画图板
public class DrawUI extends javax.swing.JFrame {
private java.awt.Color color = java.awt.Color.black;
// 定义一个队列用来保存形状对象
private ListImp<Shape> shapes = new ListImp<Shape>();
public static void main(String[] args) {
// 创建面板
DrawUI ui = new DrawUI();
// 调用初始化函数或者showUI函数
ui.init();
}
// 初始化函数
public void init() {
// 设置属性
this.setTitle("画图板");
this.setSize(800, 500);
// 设置点击关闭退出窗口
this.setDefaultCloseOperation(3);
// 设置布局
java.awt.FlowLayout fl = new java.awt.FlowLayout();
this.setLayout(fl);
// 创建组件单选按钮
javax.swing.JRadioButton line = new javax.swing.JRadioButton("直线");
// 设置组件动作命令
line.setActionCommand("line");
// 默认选中直线单选按钮
line.setSelected(true);
// 继续创建别的组件单选按钮,设置组件动作命令
javax.swing.JRadioButton rect = new javax.swing.JRadioButton("矩形");
rect.setActionCommand("rect");
javax.swing.JRadioButton oval = new javax.swing.JRadioButton("椭圆");
oval.setActionCommand("oval");
javax.swing.JRadioButton roundRect = new javax.swing.JRadioButton(
"圆角矩形");
roundRect.setActionCommand(" roundRect");
javax.swing.JRadioButton Arc = new javax.swing.JRadioButton("弧线");
Arc.setActionCommand(" Arc");
// 创建分组 group
javax.swing.ButtonGroup group = new javax.swing.ButtonGroup();
// 实现分组
group.add(line);
group.add(rect);
group.add(oval);
group.add(roundRect);
group.add(Arc);
// 将组件添加到面板上
this.add(line);
this.add(rect);
this.add(oval);
this.add(roundRect);
this.add(Arc);
// 添加"选颜色"按钮,点击后,弹出颜色选择器
javax.swing.JButton bu_color = new javax.swing.JButton("选颜色");
// 将按钮添加在窗体上
this.add(bu_color);
// 设置按钮的事件监听器
bu_color.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
// 调用弹出颜色选择器的方法
showColorSelecer();
}
});
// 设置窗体可见
this.setVisible(true);
// 添加画布,要在可视化之后
java.awt.Graphics grap = this.getGraphics();
// 窗口添加监听器
DrawListener dl = new DrawListener(grap, group, shapes);
this.addMouseListener(dl);
}
// 当点击选择颜色按钮时,显示颜色选择器,并得到用户默认选中的颜色
private void showColorSelecer() {
// 弹出颜色选择器:弹出在哪个组件(null)上,标题(请选择颜色),初始化颜色(红色)三个参数要指定
// 这是JColorChooser中的一个public static 方法,可以直接调用
this.color = javax.swing.JColorChooser.showDialog(null, "颜色选择器",
java.awt.Color.red);
}
// 重写绘制窗体的方法
public void paint(Graphics g) {
// 调用父类的方法来正确的绘制窗体
super.paint(g);
// 遍历队列,
for (int i = 0; i < shapes.size(); i++) {
// 取出对象,
Shape sh = shapes.get(i);
// 绘制形状对象
sh.draw(g);
}
}
}
3.创建一个DrawListener类,重写java.awt.event.MouseListener类中的方法。主要是mousePressed和mouseReleased方法的重写。在mouseReleased方法中创建指向shape的对象,因为Shape是抽象类,所以,采用自动转型,创建子类对象指向父类:Shape sh=new Line(x1, y1, x2, y2)。用sh调用画图的方法sh.draw(g),并将绘制的形状对象保存到队列中shapes.add(sh)。
代码如下:
package 画板_颜色_重绘;
import java.awt.event.MouseEvent;
//画板的监听器,实现鼠标监听器接口
public class DrawListener implements java.awt.event.MouseListener {
private int x1, y1, x2, y2;
private java.awt.Graphics g;
private javax.swing.ButtonGroup group;
private String type = "line";
private ListImp<Shape> shapes;
public DrawListener(java.awt.Graphics g, javax.swing.ButtonGroup group,ListImp<Shape> shapes) {
this.g = g;
this.group = group;
this.shapes = shapes;
}
// 按下
public void mousePressed(MouseEvent e) {
// 先判断要绘制的形状
// 得到选中选项的动作命令
type = group.getSelection().getActionCommand();
System.out.println("要绘制的形状:" + type);
// 得到鼠标按下时候光标的坐标
x1 = e.getX();
y1 = e.getY();
}
// 释放
public void mouseReleased(MouseEvent e) {
// 得到鼠标释放时候光标的坐标
x2 = e.getX();
y2 = e.getY();
Shape sh=new Line(x1, y1, x2, y2);
if ("line".equals(type)) {
sh = new Line(x1, y1, x2, y2);
} else if ("rect".equals(type)) {
sh = new Rect(x1, y1, x2, y2);
} else if (type.equals("oval")) {
sh = new Oval(x1, y1, x2, y2);
g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2),
Math.abs(y1 - y2));
} else if (type.equals(" roundRect")) {
sh = new RoundRect(x1, y1, x2, y2, Math.abs(x1 - x2) / 5,
Math.abs(y1 - y2) / 5);
} else if (type.equals(" Arc")) {
sh = new Arc (Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2),
Math.abs(y1 - y2), 30, 80);
}
// 绘制形状
sh.draw(g);
//将绘制的形状对象保存到队列中
shapes.add(sh);
}
// 进入
public void mouseEntered(MouseEvent e) {
}
// 退出
public void mouseExited(MouseEvent e) {
}
// 点击
public void mouseClicked(MouseEvent e) {
}
}
4.创建一个抽象类Shapepackage 画板_颜色_重绘;
import java.awt.Graphics;
public abstract class Shape {
int x1, y1, x2, y2;
public abstract void draw(Graphics g);
}
5.创建各种画图类(如:Line【直线】,Rec【矩形】,Oval【椭圆】,roundRec【圆矩】,Arc【弧线】),都继承自Shape类,是Shape类的各种实现。
例如:画Oval的方法
package 画板_颜色_重绘;
import java.awt.Graphics;
public class Oval extends Shape{
// 重载构造方法
public Oval (int x1, int y1, int x2, int y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
public void draw(Graphics g) {
g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2),
Math.abs(y1 - y2));
}
}
简单的画图板就出来啦
tips:java自身函数的应用:Math.min(x1, x2), Math.abs(x1 - x2)
- 大小: 31.2 KB
- 大小: 56.5 KB
分享到:
相关推荐
**处理用户输入**:通过监听键盘和鼠标事件,我们可以实现画板的基本功能,如选择颜色、改变画笔粗细、清除画布等。例如,监听鼠标点击并绘制线条:\n```python\nif event.type == pygame.MOUSEBUTTONDOWN:\n start...
然后,初始化画布背景色为黑色,并设置一些默认的画笔属性,如颜色和宽度。 接下来,通过添加鼠标事件监听器,我们可以实现画板的交互功能。`mousemove`事件触发`draw`函数,当鼠标在画布上移动时进行绘图;`...
用户选择颜色后,将其设置为画笔颜色。 大小调整可以通过调整画笔的宽度来实现,这可以通过`Canvas`的`create_line()`等方法的`width`参数来设置。此外,可能还需要提供缩放功能,让用户可以放大或缩小画布视图。 ...
颜色选择通常可以通过调用`fillStyle`或`strokeStyle`,设置为用户从颜色选择器中选取的颜色值。 在这个名为"drawBoard"的压缩包中,可能包含以下文件: 1. `index.html`: 主要的HTML文件,包含Canvas元素和其他...
根据题目描述,我们需要在画板上添加三个按钮:设置笔触粗细、选择颜色和橡皮擦。这些按钮可以通过`JButton`类创建,并通过事件监听器响应用户的操作。 ### 2. 设置笔触粗细 为了实现这个功能,我们可以添加一个`...
用户选择颜色的界面通常会是一个颜色选择器,这可以通过组合`Choice`、`Button`等组件来实现。 总的来说,这个项目展示了如何使用AWT来创建一个简单的图形应用,包括窗口的创建、事件监听、图形绘制以及数据的持久...
- **颜色和粗细**:提供选择颜色和调整线条粗细的UI,更新对应的canvas配置。 - **撤销/重做**:使用堆栈数据结构保存历史操作,实现撤销和重做功能。 - **橡皮擦**:切换到橡皮擦模式,可以擦除画布上的部分线条...
开发者可能使用面向对象编程思想,创建了画板类,包含了初始化画布、设置颜色和线条宽度的方法,以及处理鼠标事件的函数。通过阅读源码,我们可以学习到如何组织这样的交互式图形应用的结构和逻辑。 总的来说,...
2. **颜色选择**:提供一个颜色选择器,让用户可以选择绘制的颜色。 3. **画笔粗细**:设置画笔的粗细,允许用户调整线条宽度。 4. **开始/结束绘画**:通过监听鼠标按下和抬起事件,控制画线的开始和结束。 5. **...
【火山PC自定义画板选择框例子】是一个利用火山模块在个人计算机平台上创建自定义图形选择框的应用示例。火山模块是专为PC端开发设计的一套组件库,它提供了丰富的UI元素和交互功能,方便开发者快速构建用户界面。在...
通过访问博文链接(虽然此处给出的链接已无效),开发者原本可以获取到实现这一功能的具体代码细节,包括画板的初始化、事件监听、图形绘制逻辑以及用户交互处理等。通常,这样的项目会包含以下核心知识点: 1. **...
3. **初始化wPaint**:使用jQuery选择器选择Canvas元素,并调用`wPaint.init()`方法初始化插件。 4. **配置插件**:通过设置选项(Options)来定制画板的行为,例如颜色、粗细、透明度等。 5. **事件监听**:注册...
HTML5画板是一种基于Web技术实现的交互式绘图工具,它利用HTML5中的Canvas元素来提供...通过学习这个示例,开发者可以进一步了解Canvas API,并在此基础上扩展出更复杂的功能,如颜色选择、画笔粗细调整、撤销重做等。
4. **事件处理**:在易语言中,我们需要监听窗口或画板的特定事件,比如“窗口初始化”或“画板重绘”。在这些事件的处理函数中,我们可以调用绘制函数来更新进度条的显示。 5. **进度更新**:当程序执行的任务进度...
为了实现画板功能,需要监听鼠标和键盘事件。例如,你可以通过重载OnLButtonDown、OnMouseMove和OnLButtonUp等函数来响应鼠标点击、移动和释放事件,实现绘图功能。键盘事件可以用来改变画笔的颜色或粗细。 7. **...
对于实现签名功能,还需要考虑压力感应(如果设备支持)、线条粗细变化、颜色选择以及撤销/重做操作等。 在压缩包的文件名“DrawLine”中,我们可以推测这是项目的主要源代码文件,可能是JavaScript文件,其中包含...
- 颜色选择:提供颜色选择功能,让用户可以改变笔触颜色。 - 清除画布:提供清除按钮,一键清空画布上的所有图形。 - 保存与打开:支持将画布上的内容保存为图像文件,同时提供打开已有图像的功能。 3. **程序...
在Android开发中,自定义画板是...通过不断优化和扩展,可以增加更多功能,如颜色选择器、撤销/重做、分享画作等,以提升用户体验。记住,自定义画板的核心是监听用户的手势,将这些手势转换为在`Canvas`上的绘制动作。
1. 初始化窗口和画板控件。 2. 注册鼠标点击事件处理函数。 3. 在鼠标点击事件处理函数中,获取点击位置的RGB值。 4. 将RGB值转换成可读的颜色表示,并显示给用户。 5. 可能还包括保存颜色信息、复制颜色代码到剪贴...
- 颜色选择:添加颜色选择器,改变`ctx.strokeStyle`来切换画笔颜色。 - 线宽调整:允许用户调整线条的宽度。 - 图层管理:实现多个图层,让用户可以独立编辑各个图层。 - 工具选择:除了画笔,还可以添加橡皮擦...