package com.lk.login1029;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
//全程不看源文件和参考再加上自己的一些想法
//首先创建一个窗体
//窗体需要设置大小啊之类的;居中;当窗体关闭的时候程序自行关闭结束;
//需要给窗体添加按钮之类的;注意窗体显示出来了才能添加按钮;画笔之类的东西;
//当需求到达要添加按钮的时候就会想到添加到哪里的问题,所以就需要添加布局管理器
//当需要添加多个按钮的时候发现他们的步骤相似;所以用函数代替重复工作
//都需要添加文本;按钮自己创建;需要窗体;需要监听器
//需要给窗体装监听器;通过看原代码发现括号里面的内容需要一种接口数据类型;需要接口数据类型的时候需要重写一个类来作为数据
//需要一个数组来对与str所占位置进行填充
//当需要添加颜色按钮的时候发现;数组的内容发生了变化;因此创建一个函数重新添加全是颜色的按钮
public class DrawUI2 {
String[] strs = {"直线","正方形","椭圆","等腰三角形","任意三角形","任意多边形"};//注意是以数组形式储存不是以列表形式
Color[] color = {Color.black,Color.blue,Color.red,Color.green,Color.yellow};//颜色也是一种类型
public void showUI() {
JFrame jf =new JFrame();
jf.setSize(900, 900);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(3);
jf.setVisible(true);
FlowLayout flow =new FlowLayout();
jf.setLayout(flow);
//JButton jb =new JButton("text");
//jf.add(jb);
//jb.addActionListener(mouse);
Mouse2 mou =new Mouse2();
//给界面添加上了监听器
jf.addMouseListener(mou);
//添加多个按钮在界面上
//这种一般带xxx.的不是属性就是方法
for (int i=0;i<strs.length;i++) {
AddButton(strs[i],jf,mou);}
for (int i=0;i<color.length;i++) {
AddColor(color[i],jf,mou);
}
Graphics gr = jf.getGraphics();
mou.g = gr;
}
public void AddButton(String str,JFrame jf,ActionListener al) {
JButton jb = new JButton(str);
jf.add(jb);
jb.addActionListener(al);
}
public void AddColor(Color color,JFrame jf,ActionListener al) {
JButton jb = new JButton(" ");//空格作用增大一点按钮的大小
jb.setBackground(color);
jf.add(jb);
jb.addActionListener(al);
}
public static void main(String[] args) {
DrawUI2 ui=new DrawUI2();
ui.showUI();
}
}
package com.lk.login1029;
import javax.swing.*;
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 Mouse2 implements ActionListener,MouseListener{
Graphics g;
String typestr,str ;
int x1,y1,x2,y2;
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("按钮被点击了");
str =e.getActionCommand();
if(str.equals(" ")){
System.out.println("这是一个颜色按钮");
JButton jbu =(JButton)e.getSource();//这个的意思是将获取的发生的事件源记录下来
Color color = jbu.getBackground();
g.setColor(color);//画笔获取了背景颜色
}
else {
typestr =str;
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("按钮被点击了");
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
x1 = e.getX();
y1 =e.getY();
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
x2 =e.getX();
y2 = e.getY();
g.drawLine(x1, y1, x2, y2);
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("进入");
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("退出");
}
}
前面是整个的程序
//首先创建一个窗体
//窗体需要设置大小啊之类的;居中;当窗体关闭的时候程序自行关闭结束;
//需要给窗体添加按钮之类的;注意窗体显示出来了才能添加按钮;画笔之类的东西;
//当需求到达要添加按钮的时候就会想到添加到哪里的问题,所以就需要添加布局管理器
//当需要添加多个按钮的时候发现他们的步骤相似;所以用函数代替重复工作
//都需要添加文本;按钮自己创建;需要窗体;需要监听器
//需要给窗体装监听器;通过看原代码发现括号里面的内容需要一种接口数据类型;需要接口数据类型的时候需要重写一个类来作为数据
//需要一个数组来对与str所占位置进行填充
//当需要添加颜色按钮的时候发现;数组的内容发生了变化;因此创建一个函数重新添加全是颜色的按钮