-
基本思路:
- 对于创建含按钮触发不同功能的窗体,我们在文件夹中都需要具备画图板项目和监听器项目,画图板项目主要包含了窗体,按钮,图标等元素的基本属性及内容,监听器中则需在导入几个关键源代码包后分别复制原代码中鼠标功能并加以细化所需内容,
-
画板的创建:
- 导包以运用源代码
-
package Draw; import java.awt.*;//抽象窗口工具集 import javax.swing.plaf.synth.ColorType;//提供给定颜色组件 import javax.swing.*;//图形用户界面工具包,提供大量组件 import java.util.concurrent.Flow;//不知道
- 以下添加窗口的基础属性
-
JFrame jf = new JFrame(); jf.setTitle("画图板 v2.0"); jf.setSize(700, 800); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ImageIcon icon = new ImageIcon("d:\\桌面\\f54e1348e201b85e9360df321c98807.png"); jf.setIconImage(icon.getImage()); jf.setLayout(new FlowLayout()); DrawListener dl=new DrawListener();
- 对于一个相对完整的画图工具,还需要不同的图形和颜色选择按钮,
-
通过如下来对数据进行存储:需要存储的数据的类型 [] 数组名 = { 元素 1, 元素 2, 元素 3};如
-
String[] btnText = {"直线", "圆形", "空心圆", "矩形", "空心矩形"};
- 再通过循环语句依次取出元素
-
for (int i = 0; i < btnText.length; i++) { String text=btnText[i]; JButton btn = new JButton(text); btn.addActionListener(dl); jf.add(btn); }
通过将元素放入类,并依次取出来编辑按钮
-
String[] colortext = {"RED", "YELLOW", "BLUE", "GREEN", "BLACK", "橡皮擦"}; Color[] colors = {Color.red, Color.YELLOW, Color.BLUE, Color.GREEN, Color.BLACK, new Color(241, 217, 217, 253)}; for (int i = 0; i < colors.length; i++) { JButton btn = new JButton(colortext[i]); btn.setBackground(colors[i]); btn.addActionListener(dl); jf.add(btn); }
再调用方法添加可视化,流式布局,监听器,并将监听器的图层“g1”传一份地址给“g”,创建drawpad对象,最后调用showui:
-
jf.setVisible(true); jf.setLocationRelativeTo(null); jf.addMouseListener(dl); Graphics g= jf.getGraphics(); dl.g1=g; } public static void main (String[]args){ DrawPad drawPad = new DrawPad(); drawPad.showUI(); }
-
-
监听器的创建:
-
导包,awt*,actionlistener,mouselistener,actionevent,mouseevent,都需添加
-
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener;
- 用Drawlistener指代Mouselistener,Actionlistener,同时自定义g1图层,为了使得后方鼠标方法的正常使用,需在此定义x1x2y1y2等变量,并定义图形的种类type为某字符串,以便引用
-
public class DrawListener implements MouseListener, ActionListener { Graphics g1; int x1, x2, y1, y2; String type = "m";
- 复制鼠标源代码方法并加以丰富,可分别添加输出语句,为了易于理解,在此处我选择分别判断按钮中文本并相应赋予图层对应的颜色
-
public void actionPerformed(ActionEvent event) { System.out.println("点击按钮"); String btnText = event.getActionCommand(); System.out.println(btnText); if(btnText.equals("RED")){ g1.setColor(Color.red); }else if (btnText.equals("YELLOW")){ g1.setColor(Color.YELLOW); }else if(btnText.equals("BLUE")){ g1.setColor(Color.BLUE); }else if (btnText.equals("GREEN")){ g1.setColor(Color.GREEN); }else if(btnText.equals("BLACK")){ g1.setColor(Color.black); }else if (btnText.equals("橡皮擦")){g1 .setColor(new Color(237,237,237)); type="圆形"; }else { type=btnText;/// } }
-
- 若要想先选中图形后选中颜色,则上方划“//”的部分必须添加,如果你按下按钮识别的不是颜色,则会令按钮文本与对应形状划等,以便运行下方的代码
- 按下处仅需定义初始x1x2即可并传一份坐标
-
public void mouseClicked(MouseEvent e) { System.out.println("点击"); } public void mousePressed(MouseEvent e) { System.out.println("按下"); int x = e.getX(); int y = e.getY(); System.out.println("x:" + x + "y:" + y); x1 = x; y1 = y; }
- 对于画图工具,为防止操作而引起无法画出图形,需对平面图形的初始坐标进行修改
-
public void mouseReleased(MouseEvent event) { System.out.println("释放"); x2 = event.getX(); y2 = event.getY(); int a = x2 - x1; int b = y2 - y1; a = a < 0 ? -a : a; b = b < 0 ? -b : b; int x=x2<x1 ? x2:x1; int y = y2 < y1 ? y2 : y1; if ("直线".equals(type)){ g1.drawLine(x1,y1,x2,y2); } else if ("矩形".equals(type)) { g1.fillRect(x,y,a,b); } else if ("空心矩形".equals(type)) { g1.drawRect(x,y,a,b); }else if("圆形".equals(type)){ g1.fillOval(x,y,a,b); }else if ("空心圆".equals(type)) { g1.drawOval(x, y, a, b); } } public void mouseEntered(MouseEvent e) { System.out.println("进入"); } public void mouseExited(MouseEvent e) { System.out.println("离开"); } }
-
运行结果呈现: