到现在来说,我们也算是把初级的东西搞完,奥特曼打小怪兽,计算器的的简单应用,画图板。其实画图板是我花时间做的最长的的,因为一直要画那个多边形,自己一直想用文档中的方法做,结果越做越乱,改变策略后,用熊哥说的点与点画直线的方法,才做出来。虽然自己是学计算机的,曾经也学过c++,但是C语言的影响太深,每次的编程总会太注重面想过程,没有很快的理解面向对象。
下面就是我做的简单的画板
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 定义一个画板界面类,该类继承自JFrame
*
* @author xxj
*
*/
public class DrawingBorder extends JFrame {
/**
* 主函数
*/
public static void main(String[] args) {
DrawingBorder db = new DrawingBorder();// 实例化对象
db.initUI();// 调用初始化界面的方法
}
/**
* 初始化界面的方法
*/
public void initUI() {
// 设置窗体的属性值
this.setTitle("简单画板");
this.setSize(new Dimension(600, 500));
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
// 调用创建北边面板的方法
JPanel north = createNorthPane();
this.add(north, BorderLayout.NORTH);// 添加到窗体的北边
// 调用创建中间面板的方法
JPanel center = createCenterPane();
this.add(center, BorderLayout.CENTER);// 添加到窗体的中间
this.setVisible(true);
//获取事件源上的画布对象 如果窗体未可见,那么就无法获取到画布对象。
Graphics g = center.getGraphics();
//实例化事件处理类的对象,并且带入对应的参数
DrawingListener dl = new DrawingListener(g,this);
//给事件源添加鼠标监听器方法,绑定事件处理类的对象dl
center.addMouseListener(dl);
center.addMouseMotionListener(dl);
}
/**
* 事件处理类的对象
* 使用匿名内部类来实现ActionListener接口的具体实现
*/
private ActionListener al = new ActionListener(){
//事件处理方法
public void actionPerformed(ActionEvent e) {
str = e.getActionCommand();//获取事件源的动作命令值。
System.out.println("str = "+str);
}
};
//定义字符串属性,用来存储图形
private String str = "Line";
protected Color color;
/**
* 获取图形属性值的方法
*/
public String getStr(){
return str;
}
/**
* 创建北边面板的方法
* @param 返回创建好的JPanel对象
*/
public JPanel createNorthPane() {
JPanel jp = new JPanel();// 实例化面板对象
/**
* 接口不能用来实例化对象;但是在实例化接口对象时,带上一对大括号,就表示在实例化对象时,该接口有了具体的实现
* {}就是一个类,但是没有类名,而且是在另一个类中。 匿名内部类。
*/
jp.setPreferredSize(new Dimension(30, 80));// 设置大小
ActionListener al = new ActionListener() {
// 事件处理方法
public void actionPerformed(ActionEvent e) {
// 判断点击的是否是Color按钮
if (e.getActionCommand().equals("Color")) {
//弹出一个颜色选择界面,供用户选择颜色,选择好的颜色会返回给color
color = JColorChooser.showDialog(null, "颜色选择器",
Color.BLACK);
System.out.println("color= "+color);
} else {
// 获取按钮上的文本内容
str = e.getActionCommand();
System.out.println("str = " + str);
}
}
};
// 定义数组,存储按钮上显示的文字
String[] array = { "Line", "Rect", "Oval", "RoundRect","Polygon","Pencil", "Color", "Easer","Brush"};
// 遍历数组,循环创建JButton对象
for (int j= 0; j < array.length; j++) {
// 创建按钮,按钮上显示的内容是数组中的元素
JButton jbu = new JButton(array[j]);
// 给事件源添加动作监听器方法,绑定事件处理类的对象al
jbu.addActionListener(al);
jp.add(jbu);
}
return jp;
}
/**
* 创建中间面板的方法
* @param 返回创建好的JPanel对象
*/
public JPanel createCenterPane()
{
JPanel panel = new JPanel();// 实例化面板对象
panel.setBackground(Color.WHITE);// 设置面板的背景色
return panel;
}
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 定义一个画板界面类,该类继承自JFrame
*
* @author xxj
*
*/
public class DrawingBorder extends JFrame {
/**
* 主函数
*/
public static void main(String[] args) {
DrawingBorder db = new DrawingBorder();// 实例化对象
db.initUI();// 调用初始化界面的方法
}
/**
* 初始化界面的方法
*/
public void initUI() {
// 设置窗体的属性值
this.setTitle("简单画板");
this.setSize(new Dimension(600, 500));
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
// 调用创建北边面板的方法
JPanel north = createNorthPane();
this.add(north, BorderLayout.NORTH);// 添加到窗体的北边
// 调用创建中间面板的方法
JPanel center = createCenterPane();
this.add(center, BorderLayout.CENTER);// 添加到窗体的中间
this.setVisible(true);
//获取事件源上的画布对象 如果窗体未可见,那么就无法获取到画布对象。
Graphics g = center.getGraphics();
//实例化事件处理类的对象,并且带入对应的参数
DrawingListener dl = new DrawingListener(g,this);
//给事件源添加鼠标监听器方法,绑定事件处理类的对象dl
center.addMouseListener(dl);
center.addMouseMotionListener(dl);
}
/**
* 事件处理类的对象
* 使用匿名内部类来实现ActionListener接口的具体实现
*/
private ActionListener al = new ActionListener(){
//事件处理方法
public void actionPerformed(ActionEvent e) {
str = e.getActionCommand();//获取事件源的动作命令值。
System.out.println("str = "+str);
}
};
//定义字符串属性,用来存储图形
private String str = "Line";
protected Color color;
/**
* 获取图形属性值的方法
*/
public String getStr(){
return str;
}
/**
* 创建北边面板的方法
* @param 返回创建好的JPanel对象
*/
public JPanel createNorthPane() {
JPanel jp = new JPanel();// 实例化面板对象
/**
* 接口不能用来实例化对象;但是在实例化接口对象时,带上一对大括号,就表示在实例化对象时,该接口有了具体的实现
* {}就是一个类,但是没有类名,而且是在另一个类中。 匿名内部类。
*/
jp.setPreferredSize(new Dimension(30, 80));// 设置大小
ActionListener al = new ActionListener() {
// 事件处理方法
public void actionPerformed(ActionEvent e) {
// 判断点击的是否是Color按钮
if (e.getActionCommand().equals("Color")) {
//弹出一个颜色选择界面,供用户选择颜色,选择好的颜色会返回给color
color = JColorChooser.showDialog(null, "颜色选择器",
Color.BLACK);
System.out.println("color= "+color);
} else {
// 获取按钮上的文本内容
str = e.getActionCommand();
System.out.println("str = " + str);
}
}
};
// 定义数组,存储按钮上显示的文字
String[] array = { "Line", "Rect", "Oval", "RoundRect","Polygon","Pencil", "Color", "Easer","Brush"};
// 遍历数组,循环创建JButton对象
for (int j= 0; j < array.length; j++) {
// 创建按钮,按钮上显示的内容是数组中的元素
JButton jbu = new JButton(array[j]);
// 给事件源添加动作监听器方法,绑定事件处理类的对象al
jbu.addActionListener(al);
jp.add(jbu);
}
return jp;
}
/**
* 创建中间面板的方法
* @param 返回创建好的JPanel对象
*/
public JPanel createCenterPane()
{
JPanel panel = new JPanel();// 实例化面板对象
panel.setBackground(Color.WHITE);// 设置面板的背景色
return panel;
}
}