目标一:
掌握数组的创建 与 循环遍历 给窗体加上图形选择按钮 增加实现动作监听器 实现选择图形功能
·实现步骤:
·1: 设窗体的布局为流式布局 FlowLayout
·2: 创建多个按钮对象 并加到窗体上
·3: 给监听器增加动作监听器ActionListener
·4: 实现动作监听的actionPerformed方法
·5: 在方法中获取按钮的文本 赋值给 type 全局变量
·6: 在鼠标松开的方法中 使用type判断 用来绘制什么图形
·7: 给按钮加上动作监听器 与鼠标监听器是同一个对象
·数据结构:用于存储数据的结构,结构是多变的,线性,链式 网状的 树状的
·格式:
·数据类型[] 数组变量名={元素1,元素2,元素3,元素4,元素5};
·PS: int[] arr = {0,5,6,7,1,2,2,9,1,0};
·String[] arr1 ={"hello","world"};
·数组有个特定的属性叫做下标:
·下标固定: 从0计数,每个元素+1
·通过下标获取元素: 数据变量 = 数组名[i]
·int n = arr[7];
·替换: 数组名[i]=值;
·arr[5]=10;
// 创建一个文本数组
String[] btnStrs = {"直线","矩形","圆形","实心矩形","实心圆形","正圆",
"等腰三角形","三角形","多边形","撤回","清屏"};
for (int i = 0; i < btnStrs.length; i++) {
JButton btn = new JButton(btnStrs[i]);
jf.add(btn);
btn.addActionListener(dl);
}
目标二:
给窗体加上图形选择按钮 增加实现动作监听器 实现选择图形功能 实现颜色按钮功能
界面代码:
package comsum.drawpad.yzy0707;
import javax.swing.*;
import java.awt.*;
public class DrawPad {
public void showUI() {
JFrame jf = new JFrame();
jf.setTitle("画图板V1");
jf.setSize(800, 800);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setLocationRelativeTo(null);
// 设置布局
FlowLayout flow = new FlowLayout();
jf.setLayout(flow);
// JButton btn1 = new JButton("直线");
// JButton btn2 = new JButton("矩形");
// jf.add(btn1);
// jf.add(btn2);
// 创建一个监听对象
DrawListener dl = new DrawListener();
// 创建一个文本数组
String[] btnStrs = {"直线", "矩形", "圆形", "实心矩形", "实心圆形", "正圆",
"等腰三角形", "三角形", "多边形", "撤回", "清屏"};
for (int i = 0; i < btnStrs.length; i++) {
JButton btn = new JButton(btnStrs[i]);
jf.add(btn);
btn.addActionListener(dl);
}
// 创建一个颜色数组
Color[] colorArr = {Color.BLACK, Color.WHITE, Color.GRAY, Color.LIGHT_GRAY,
Color.DARK_GRAY,
Color.RED, Color.GREEN, Color.BLUE, Color.CYAN, Color.YELLOW,
Color.ORANGE, Color.PINK
};
String[] colorStrs=
{"BLACK","WHITE","GRAY","L_GRAY","D_GRAY","RED","GREEN","BLUE","CYAN","YELLOW","ORANGE
","PINK"};
for (int i = 0; i < colorArr.length; i++) {
JButton btn = new JButton(colorStrs[i]);
btn.setBackground(colorArr[i]);
jf.add(btn);
btn.addActionListener(dl);
}
jf.setVisible(true);
// 获取Graphics - 画笔
Graphics g = jf.getGraphics();
comsum.drawpad.zyf0707
javax.swing.
java.awt. jf.addMouseListener(dl);
// btn1.addActionListener(dl);
// btn2.addActionListener(dl);
dl.g = g;// 传引用地址
}
public static void main(String[] args) {
DrawPad drawPad = new DrawPad();
drawPad.showUI();
}
}
监听器代码:
package comsum.drawpad.yzy0707;
import java.awt.*;
import java.awt.event.ActionEvent;
import javaawt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
//String[] colorStrs=
{"BLACK","WHITE","GRAY","L_GRAY","D_GRAY","RED","GREEN","BLUE","CYAN","YELLOW","ORANGE
","PINK"};
public class DrawListener implements MouseListener, ActionListener {
Graphics g;
int x1, y1, x2, y2;
String type = "";
@Override
public void actionPerformed(ActionEvent e) {
// 按钮的文本
String ac = e.getActionCommand();
System.out.println(ac);
// if(ac.equals("BLACK")){
// g.setColor(Color.BLACK);
// }
switch (ac) {// 括号中是需要比较的 后面的case是选项
case "BLACK":
g.setColor(Color.BLACK);
break;
case "WHITE":
g.setColor(Color.WHITE);
break;
case "GRAY":
g.setColor(Color.GRAY);
break;
default:// 默认的 上面都没有匹配到
type = ac;// 每次点击按钮都将 ac 赋值给type
}
}
public void mouseClicked(MouseEvent e) {
System.out.println("点击");
int x = e.getX();
int y = e.getY();
System.out.println("x: " + x + " y: " + y);
}
public void mousePressed(MouseEvent e) {
System.out.println("按下");
comsum.drawpad.zyf0707
java.awt.
java.awt.event.
java.awt.event.
java.awt.event.
java.awt.event. int x = e.getX();
int y = e.getY();
System.out.println("x: " + x + " y: " + y);
x1 = x;
y1 = y;//赋值给全局变量,可以在整个类中都使用
}
public void mouseReleased(MouseEvent e) {
System.out.println("松开");
int x = e.getX();
int y = e.getY();
System.out.println("x: " + x + " y: " + y);
x2 = x;
y2 = y;
if (type.equals("直线")) {
// 绘制直线
g.drawLine(x1, y1, x2, y2);
} else if (type.equals("矩形")) {
// 矩形 左上角的坐标 宽度 高度
g.drawRect(min(x1, x2), min(y1, y2), abs(x2 - x1), abs(y2 - y1));
} else if (type.equals("实心矩形")) {
g.fillRect(min(x1, x2), min(y1, y2), abs(x2 - x1), abs(y2 - y1));
} else if (type.equals("实心圆形")) {
g.fillOval(min(x1, x2), min(y1, y2), abs(x2 - x1), abs(y2 - y1));
} else if (type.equals("圆形")) {
g.drawOval(min(x1, x2), min(y1, y2), abs(x2 - x1), abs(y2 - y1));
} else if (type.equals("等腰三角形")) {
}
// 利用直线 和 两个点
// 矩形
// 等腰三角形
// 多边形
// 自带的绘制方法
// // 外切矩形 左上角的坐标 宽度 高度
// g.drawOval(min(x1, x2), min(y1, y2), abs(x2 - x1), abs(y2 - y1));
// g.setColor(Color.BLUE);
// g.fillRect(min(x1, x2), min(y1, y2), abs(x2 - x1) / 2, abs(y2 - y1) / 2);
// g.setColor(Color.orange);
// g.fillOval(min(x1, x2), min(y1, y2), abs(x2 - x1) / 2, abs(y2 - y1) / 2);
}
public void mouseEntered(MouseEvent e) {
System.out.println("进入");
}
public void mouseExited(MouseEvent e) {
System.out.println("离开"); }
// 自己定义计算方法
public int abs(int n) {
return n < 0 ? -n : n;
}
public int min(int a, int b) {
return a < b ? a : b;
}
}