- XP简易画图板实现过程
大致过程:创建一个窗体,在窗体上加三个面板,一个形状区域,一个颜色区域,一个画图区域
界面:
三个面板色创建及设置大小颜色:
JPanel panel_xz = new JPanel();
JPanel panel_color = new JPanel();
JPanel panel_hb = new JPanel();
panel_xz.setBackground(Color.green);
panel_color.setBackground(Color.gray);
panel_hb.setBackground(Color.white);
panel_xz.setPreferredSize(new Dimension(80, 550));
panel_color.setPreferredSize(new Dimension(40, 40));
panel_hb.setPreferredSize(new Dimension(100, 550));
怎么把十六个形状加到面板上去?
通过创建一个数组,把十六个形状加到数组里面去,在通过for循环遍历数组把十六个形状加到面板上去
系统怎么知道用户点击的是哪个按钮呢,所以要在每个按钮上添加一个按钮标记
// 设置按钮上的标记
button.setActionCommand(tp[i]);
最后别忘了给这些按钮加监听
颜色面板:
我们从图中看到颜色面板当中也有许多的颜色按钮,所以我们可以跟形状面板中的按钮一样通过创建
一个颜色数组,吧所有颜色按钮加到数组中,在通过for循环吧按钮加到面板上去
怎么样才能让用户随心的选择颜色区话想要的图形呢, 在这里有两种方法,一个是在一个类中写,另一个是再新建一个类,我就是新建一个类来实现的
但是怎么样才能在画图板上点击按钮得到我们想要画的图形呢,我们在这里实现了三个画图功能,直线 ,圆,矩形
首先花直线我们应该要得到两个坐标值,但是怎么样才能的到两个坐标值呢,这个是通过创建鼠标监听来实现的
在按钮按下的时候获取一个坐标值,在按钮松开的时候获取一个坐标值,这样两个坐标值就构成了一条直线
画圆:
if (anniu == "oval") {
// if (x1 > x2 && y1 > y2) {
g.drawOval(Math.min(x1, x2), Math.min(y1, y2),
Math.abs(x2 - x1), Math.abs(y2 - y1));
}
画矩形
if (anniu == "round_rect") {
// if (x1 < x2 && y1 > y2) {
g.drawRoundRect(Math.min(x1, x2), Math.min(y1, y2),
Math.abs(x1 - x2), Math.abs(y1 - y2), 25, 15);
}
画铅笔和喷漆
当然画铅笔和喷漆跟画直线和圆这些有点不一样,他是通过这个按钮监听来写的:在画这些图形的时候用到的是这个画笔 ( public Graphics2D g2d;)
MouseMotionListener mouse_listener = new MouseMotionListener() {
public void mouseMoved(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
if (anniu == "pencil") {
x2 = e.getX();
y2 = e.getY();
g.drawLine(x1, y1, x2, y2);
x1 = x2;
y1 = y2;
}
if (anniu == "airbrush") {
x3 = e.getX();
y3 = e.getY();
Random rand = new Random();
g.setColor(Color.red);
// 使用循环画20个小点
for (int i = 0; i < 20; i++) {
// 在20个像素范围内随机一个值
int tempx = rand.nextInt(20);
int tempy = rand.nextInt(20);
总结:在制作XP简易画板的时候,最应该注意的应该是在自己的脑海中要知道怎样一步步的去实现这个功能,这个功能是怎么样实现的,实现的过程中会有哪些问题,这些都要我们自己去构造,去调用哪些方法,特别是在画哪些图案的时候,可能能够实现功能,可是当你画出来的时候才发现画的时候只有一个方向能画出来, 其他的方向就画不出来,还有给哪些参数的时候,要明白哪些坐标真正的位置,才能够得到正确的值,这样才能制作出一个完整的画图板,,当然最在写这些代码的时候要用心
^_^ ^_^ fack 加油吧 GG