创意画板——画三角形,矩形等
接着我们上一篇的画一条直线,今天我们来进阶画图形。
代码如下还是由两个类组成
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class DrawUI {
//定义按钮和颜色的字符串
String[] btnstrs = {"直线","矩形","圆","三角形","递归图形","迭代分形","撤回","清空"};
Color[] colors ={
Color.WHITE,Color.YELLOW,Color.BLACK,Color.BLUE,Color.RED,Color.MAGENTA,
Color.GRAY,Color.LIGHT_GRAY,Color.PINK,Color.GREEN,Color.CYAN
};
public void initUI() {
//创建一个窗口
JFrame jf=new JFrame();
jf.setTitle("画板");
jf.setSize(800,600);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
//添加流式布局管理器
FlowLayout fl = new FlowLayout();
jf.setLayout(fl);
//添加画笔
Graphics g = jf.getGraphics();
//创建画板监听器的对象
DrawListener dl=new DrawListener();
Dimension dim = new Dimension(100,40); //按钮的尺寸
for (int i = 0; i < btnstrs.length; i++) {
addButton(btnstrs[i],dim,Color.white,dl,jf);
}
Dimension colordim = new Dimension(40,40);//颜色按钮的尺寸
for (int i = 0; i < colors.length; i++) {
addButton("",colordim,colors[i],dl,jf);
}
dl.g2=g;
jf.addMouseListener(dl);
}
public void addButton(String btnstr,Dimension dim, Color color, ActionListener al,JFrame jf){
JButton btn = new JButton(btnstr);
btn.setBackground(color);
btn.setPreferredSize(dim);
jf.add(btn);
btn.addActionListener(al);
}
public static void main(String[] args) {
DrawUI d =new DrawUI();
d.initUI();
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
public class DrawListener implements MouseListener,ActionListener {
int x1,x2,y1,y2;
Graphics g2; // 定义画笔
String shapeStr="";
public void actionPerformed(ActionEvent e){
String btnstr = e.getActionCommand();// 字符串
System.out.println("点击了"+btnstr);
if(btnstr.equals("")){
JButton btn = (JButton) e.getSource();
System.out.println("按钮对象:"+btn.getText());
Color btnBgcolor = btn.getBackground();
g2.setColor(btnBgcolor);
}else{
shapeStr=btnstr;
}
}
public void mouseClicked(MouseEvent e){
}
public void mousePressed(MouseEvent e){
x1=e.getX();
y1=e.getY();
System.out.println("按下");
}
public void mouseReleased(MouseEvent e){
x2=e.getX();
y2=e.getY();
g2.drawLine(x1,y1,x2,y2);// 画线
if (shapeStr.equals("直线")){
g2.drawLine(x1,y1,x2,y2);
}else if(shapeStr.equals("矩形")){
// 左上角的坐标 宽 高
g2.drawRect(min(x1,x2),min(y1,y2),abs(x2-x1),abs(y2-y1));
}else if(shapeStr.equals("圆")){
// 外切矩形 左上角的坐标 宽 高
g2.drawOval(Math.min(x1,x2),min(y1,y2),abs(x2-x1),abs(y2-y1));
}
System.out.println("松开");
}
public int min(int a,int b){
return a < b ? a : b;
}
public int abs(int a){
return a < 0 ? -a : a;
}
=
public void mouseEntered(MouseEvent e){
}
=
public void mouseExited(MouseEvent e){
}
}
效果如图:
这里面还有一些复杂的问题,在这里我没有详细说明,例如换颜色的时候怎么做到区别颜色按钮和文字按钮的背景板颜色。不懂的小伙伴私信我,我们一起讨论。