实现画板画百度熊之后的选择按钮和颜色按钮
DrawUI.java
import java.awt.Graphics;
import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class DrawUI {
//显示界面的方法
public void showUI() {
//创建窗体对象
JFrame drawFrame = new JFrame();
//设置属性
drawFrame.setSize(1000, 600);
drawFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
drawFrame.setLocationRelativeTo(null);
FlowLayout flowl = new FlowLayout();//流式布局
drawFrame.setLayout(flowl);
//创建监听器
DrawListener drawL = new DrawListener();
//添加监听器
drawFrame.addMouseListener(drawL);
Button login1 = new Button("直线");//建立图形选择按钮
Dimension size = new Dimension(360,35);//大小
login1.setPreferredSize(size);
drawFrame.add(login1);
Button login2 = new Button("小熊");//建立图形选择按钮
login2.setPreferredSize(size);
drawFrame.add(login2);
/* DrawListener2 loginL = new DrawListener2();//设置监听器
DrawListener2 loginR = new DrawListener2();//设置监听器
login1.addActionListener(loginL);//给按钮加监听器
login2.addActionListener(loginR);//给按钮加监听器
loginL.pic1 = login1;//给监听器赋值
loginR.pic2= login2;//赋值*/
/*//图形文字数组
String[] textArr = {"直线","小熊","小猫"};
//循环创建按钮
for(int i=0; i<textArr.length; i++) {
//创建按钮
JButton btn =new JButton(textArr[i]);
//添加按钮
drawFrame.add(btn);
//添加监听器
btn.addActionListener(drawL);
}*/
login1.addActionListener(drawL);
login2.addActionListener(drawL);
//设置一个可以改变为红色的按钮
JButton redbtn = new JButton();
//设置按钮背景色为红
redbtn.setBackground(Color.red);
//设置按钮的大小
Dimension colorBtnSize = new Dimension(28,28);
redbtn.setPreferredSize(colorBtnSize);
//将红色按钮添加到窗体上
drawFrame.add(redbtn);
//添加监听器
redbtn.addActionListener(drawL);
//设置可见
drawFrame.setVisible(true);
//获取画布
Graphics g = drawFrame.getGraphics();
//给监听器的属性赋值
drawL.setGraphics(g);
drawFrame.setVisible(true);
}
//主方法
public static void main(String[] args) {
//创建界面对象
DrawUI ui = new DrawUI();
//显示界面
ui.showUI();
}
}
创建按钮:
1.Button btn = new Button(); //new一个btn
2.Dimension size = new Dimension(360,35); //设置按钮大小
3.btn.setPreferredSize(size); //参数放入
4.drawFrame.add(btn); //把btn按钮放进drawFrame上
5.把提前设置好的监听器drawL加按钮
DrawListener drawL = new DrawListener(); //在自己已经定义好的DrawListenenr()里new一个drawL
drawFrame.addMouseListener(drawL); //在drawFrame中添加drawL
(btn).addActionListener(drawL); //把对按钮的监听器加入
**
下面是DrawListener.java的代码
**
DrawListenenr.java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
public class DrawListener implements MouseListener, ActionListener{
//记录坐标的信息
int x1,y1,x2,y2;
//画布
private Graphics g;
//保存图形信息
String shapeText = "直线";
//保存颜色信息,是初始的线条的颜色
Color curColor = Color.black;
//设置画布的方法
public void setGraphics(Graphics g) {
this.g = g;
}
public void actionPerformed(ActionEvent e) {
//获取按钮的信息
String action = e.getActionCommand();
shapeText = action;
if("".equals(action)) {
//因为getActionCommand()方法无法get颜色信息
//获取事件源,getSource的目标是Object
Object srcObj = e.getSource();
//获取按钮,子类换成父类要强制转换
JButton srcBtn = (JButton)srcObj;
//h获取颜色,要在画直线处进行设置
Color srcColor = srcBtn.getBackground();
//保存颜色
curColor = srcColor;
}
}
public void mousePressed(MouseEvent e) {
//获取坐标
x1 = e.getX();
y1 = e.getY();
}
public void mouseReleased(MouseEvent e) {
//获取坐标
x2 = e.getX();
y2 = e.getY();
g.setColor(curColor);
if("直线".equals(shapeText)) {
//画线
g.drawLine(x1, y1, x2, y2);
}
else if("小熊".equals(shapeText)) {
//画熊
//头
Color color = new Color(224,178,142);
g.setColor(color);
g.fillOval(x1, y1, 110, 100);
//眼睛
g.setColor(Color.WHITE);
g.fillOval(x1+20, y1+32, 18, 24);
g.setColor(Color.WHITE);
g.fillOval(x1+75, y1+32, 18, 24);
//眼黑
g.setColor(Color.BLACK);
g.fillOval(x1+23, y1+36, 10, 14);
g.setColor(Color.BLACK);
g.fillOval(x1+78, y1+36, 10, 14);
//嘴巴
Color colorhui =new Color(248,246,229);
g.setColor(colorhui);
g.fillOval(x1+37, y1+50, 40, 30);
//鼻子
g.setColor(Color.BLACK);
g.fillOval(x1+53, y1+50, 9, 9);
//左耳朵
g.setColor(color);
g.fillOval(x1+3, y1+3, 22, 22);
//右耳朵
g.setColor(color);
g.fillOval(x1+84, y1+3, 22, 22);
}
//输出
System.out.println("起点("+x1+","+y1+"),终点("+x2+","+y2+")");
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
注意项:
1.直接在DrawListener后implements MouseListener,ActionListener两个类。
在J2SE中查找ActionEvent,可见四个方法。如图
要得到按钮反馈的信息。首先排除返回值为int的getModifiers(),long的getWhen()。通过一个输出判断,paramString()不返回需要的信息值。但是getActionCommand()返回值为按钮上的“小熊”或者“直线”。所以调用getActionCommand(),
String action = e.getActionCommand();
shapeText = action;
再通过if(“小熊”.equals(shapeText))或者if(“直线”.equals(shapeText))作比较,便可以得出正确的按钮调用。
设置颜色按钮
设置颜色按钮时,本可以在按钮上比如显示一个“红”“黑”“黄”等字样去单独表示。但是颜色按钮这样表示的话就不直观,所以可以改为直接把按钮改成一样的颜色,用户在使用的时候便可以方便许多。
前面的按钮信息是通过getActionCommand()访问,但是观察发现,getActionCommand()并不能够返回与颜色相关的值。在J2SE中查看getSource()信息。
在DrawUI.java中
//设置一个可以改变为红色的按钮
JButton redbtn = new JButton();
//设置按钮背景色为红
redbtn.setBackground(Color.red);
//设置按钮的大小
Dimension colorBtnSize = new Dimension(28,28);
redbtn.setPreferredSize(colorBtnSize);
//将红色按钮添加到窗体上
drawFrame.add(redbtn);
//添加监听器
redbtn.addActionListener(drawL);
在DrawListener.java中
//获取事件源,getSource的目标是Object
Object srcObj = e.getSource();
//获取按钮,子类换成父类要强制转换
JButton srcBtn = (JButton)srcObj;
//h获取颜色,要在画直线处进行设置
Color srcColor = srcBtn.getBackground();
//保存颜色
curColor = srcColor;
通过这几步获取颜色信息,并将按钮的背景色,设置为改颜色,本例以红色为例。
到这里,代码目标就已经基本实现,效果如图:从上到下就是黑色直线,切换到小熊,切换到红色直线的效果。