用java编写画板

来源:互联网 发布:网络暴力数据分析 编辑:程序博客网 时间:2024/05/16 09:43

                          用java编写画板是我学习java的第二个事例,写画板其中要表现的功能在后面的代码中并没有全部实现,只实现了铅笔、刷子、橡皮擦、画直线、画矩形这些功能,

其中有用到继承、接口、方法重载、传参等知识点,在代码中我会用注释解释:

1、创建工程,工程名可以随意设置

2、创建DrawBroad类,继承JFrame,并导包

import javax.swing.JFrame;public class DrawBroad extends JFrame {}
3、在包中创建Text类,并建立主函数

public class Text {public static void main(String[] args) {}}
4、在Text类中的主函数建立DrawBroad对象以调用DrawBroad类中的方法

DrawBroad db = new DrawBroad();
5、在DrawBroad类中创建方法

public void iniFrame(){}
6、在Text类中调用iniFrame方法

db.iniFrame();
7、在方法iniFrame方法中编写窗体属性,在后面的代码中都要写在iniFrame方法中,不然就在主函数中运行不起来

//创建窗口标题this.setTitle("画板");//创建窗口大小this.setSize(600,500);//创建窗口默认关闭操作this.setDefaultCloseOperation(3);//创建窗口出现的相对位置(屏幕中央)this.setLocationRelativeTo(null);//设置窗口的可见性this.setVisible(true);
8、创建边框布局,将窗体划分为左中下三部分

//创建边框布局BorderLayout bl = new BorderLayout();this.setLayout(bl);
9、在三个部分上添加三个面板panelTool,panelDraw,panelColor,并设置三个面板属性,将三个面板添加到窗体上

// 创建三个面板JPanel panelTool = new JPanel();JPanel panelDraw = new JPanel();JPanel panelColor = new JPanel();// 设置背景色panelTool.setBackground(Color.gray);panelDraw.setBackground(Color.white);panelColor.setBackground(Color.green);// 设置这三个面板的大小panelTool.setPreferredSize(new Dimension(50, 0));panelColor.setPreferredSize(new Dimension(0, 50));// 将三个面板添加到窗体上去this.add(panelTool, BorderLayout.WEST);this.add(panelColor, BorderLayout.SOUTH);this.add(panelDraw);
10、在panelTool中创建单选按钮,将图片放在按钮上

//创建图片对象,将图片放在按钮上ImageIcon mi = new ImageIcon("images/draw"+i+".jpg");ImageIcon mi1 = new ImageIcon("images/draw"+i+"-1.jpg");ImageIcon mi2 = new ImageIcon("images/draw"+i+"-2.jpg");ImageIcon mi3 = new ImageIcon("images/draw"+i+"-3.jpg");jrb.setIcon(mi);jrb.setSelectedIcon(mi3);jrb.setPressedIcon(mi2);jrb.setRolloverIcon(mi1);
//将按钮边框去掉
jrb.setBorder(null);
11、将panelTool面板设置为流式布局,让单选按钮紧密连在一起,起到美化作用

// 将panelTool设置为流式布局panelTool.setLayout(new FlowLayout(0, 0, 0));
12、将panelTool的背景色设置为按钮颜色,起到美化作用

// 将panelTool面板的背景色设置为按钮的颜色Color color = new Color(233, 234, 238);// 设置背景色panelTool.setBackground(color);panelDraw.setBackground(Color.white);panelColor.setBackground(color);

13、在panelColor中添加三个面板来建立颜色框

// 在panelColor面板上在次添加三个面板// 创建三个面板对象JPanel panelColorFrame = new JPanel();JPanel panelColorLeft = new JPanel();JPanel panelColorRight = new JPanel();// 设置面板背景panelColorFrame.setBackground(Color.blue);panelColorLeft.setBackground(Color.white);panelColorRight.setBackground(Color.orange);// 设置面板大小panelColorFrame.setPreferredSize(new Dimension(180, 30));panelColorLeft.setPreferredSize(new Dimension(30, 30));panelColorRight.setPreferredSize(new Dimension(150, 30));// 设置流式布局panelColor.setLayout(new FlowLayout(0, 5, 10));panelColorFrame.setLayout(new FlowLayout(0, 0, 0));panelColorLeft.setLayout(new FlowLayout(0, 0, 0));panelColorRight.setLayout(new FlowLayout(0, 0, 0));// 将三个面板添加到下方面板panelColor.add(panelColorFrame);panelColorFrame.add(panelColorLeft);panelColorFrame.add(panelColorRight);
14、在panelColorRight中添加按钮,并添加颜色

// 在panelColorRight上添加二十个按钮Color[] color1 = { Color.black, Color.blue, Color.cyan, Color.gray,Color.green, Color.black, Color.blue, Color.cyan, Color.gray,Color.green, Color.black, Color.blue, Color.cyan, Color.gray,Color.green, Color.black, Color.blue, Color.cyan, Color.gray,Color.green };for (int i = 0; i < 20; i++) {JButton button = new JButton();button.setPreferredSize(new Dimension(15, 15));button.setBackground(color1[i]);panelColorRight.add(button);
15、将颜色框设置为凹下,是在按钮里设置

BevelBorder bb = new BevelBorder(1, Color.white, Color.gray);button.setBorder(bb);

16、将两个按钮添加到panelColorLeft面板上去,写在this.setVisible(true);之前

JButton b1 = new JButton();JButton b2 = new JButton();b1.setBackground(Color.black);b2.setBackground(Color.white);BevelBorder bb1 = new BevelBorder(0, Color.white, Color.gray);b1.setBorder(bb1);b2.setBorder(bb1);panelColorLeft.add(b2);panelColorLeft.add(b1);
17、创建DrawListener类,继承接口(implements)mouseListener,然后添加鼠标监听方法,这种方法为方法重写

public void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}public void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}public void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}public void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}public void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}
18、在画板上画笔,在DrawListener类中进行传参

g = this.getGraphics();DrawListener dl = new DrawListener(g, bg);this.addMouseListener(dl);

//是在DrawListener类中进行创建
public ButtonGroup bg;public Graphics gra;public DrawListener(Graphics g1, ButtonGroup bg1) {gra = g1;bg = bg1;}

19、在DrawListener类中进行计算

public void mousePressed(MouseEvent e) {// TODO Auto-generated method stubx1 = e.getX();y1 = e.getY();
//获得按钮上的标签ButtonModel bm = bg.getSelection();command = bm.getActionCommand();}public void mouseReleased(MouseEvent e) {// TODO Auto-generated method stubx2 = e.getX();y2 = e.getY();if ("10".equals(command)) {gra.drawLine(x1, y1, x2, y2);}
20、获得颜色来改变画笔的颜色,需要创建一个ColorListener类

// 添加颜色监听对象
ColorListener cl = new ColorListener(this);

public class ColorListener implements ActionListener {public DrawBroad db;public ColorListener(DrawBroad db1) {db = db1;}public void actionPerformed(ActionEvent e) {Object obj = e.getSource();JButton button = (JButton) obj;Color color = button.getBackground();db.g.setColor(color);}}
21、添加画笔,需要在DrawListener类中接口MouseMotionListener,在方法中计算公式

@Overridepublic void mouseDragged(MouseEvent e) {// TODO Auto-generated method stubx2 = e.getX();y2 = e.getY();if ("6".equals(command)) {gra.drawLine(x1, y1, x2, y2);x1 = x2;y1 = y2;}
22、添加刷子,其中画笔类型父类强行转化为子类类型

public Graphics2D gra;
public DrawListener(Graphics g1, ButtonGroup bg1) {gra = (Graphics2D) g1;bg = bg1;
else if ("7".equals(command)) {gra.setStroke(new BasicStroke(10));gra.drawLine(x1, y1, x2, y2);x1 = x2;y1 = y2;gra.setStroke(new BasicStroke(1));}
23、添加橡皮擦,其中要设置背景色为白色

else if ("2".equals(command)) {gra.setColor(Color.white);gra.setStroke(new BasicStroke(10));gra.drawRect(Math.min(x2, x1), Math.min(y2, y1), Math.abs(x2 - x1),Math.abs(y2 - y1));x1 = x2;y1 = y2;gra.setStroke(new BasicStroke(1));}
其余功能有些类似,总共实现了这几大功能大概打画板出来























0 0
原创粉丝点击