~~~~~~~ 上一次我们实现了一个页面,并加入了一些按钮、标签等组件。这次我们先用swing制作一个画图板,为之后作一个铺垫。我们先使用流式布局,制作一个画图板:思路很简单,向JFrame中使用流式布局器加入按钮,然后为按钮赋予功能。
这个画图板在之前的界面与监听器基础上加入画图功能(Graphics),实现了一些简单的画图功能。先放上一张展示图:
界面代码和之前的很相似,只是在之前的基础上使用了数组向界面上加入线型选择按钮、颜色选择按钮。
DrawListener dl =new DrawListener();//调用DrawListener
String [] drawoption ={"直线","圆","矩形"};
for(int i=0;i<drawoption.length;i++) {
JButton btn = new JButton(drawoption[i]);
jf.add(btn);
btn.addActionListener(dl);
}
//Color c =new Color();
Color [] coloroption = {Color.BLACK,Color.blue,Color.CYAN,Color.gray,Color.GREEN,Color.red};
Dimension dim= new Dimension(30,30);
for(int i=0;i<coloroption.length;i++) {
JButton btn = new JButton();
btn.setBackground(coloroption[i]);//用颜色标明按钮,直观形象
btn.setPreferredSize(dim);
jf.add(btn);
btn.addActionListener(dl);
}
~~~~~~~ 我们还会用到一个新的接口–MouseListener,用来监听我们鼠标的移动。通过计算按下、松开鼠标的坐标值,我们可以用画笔画出需要的图案。为了方便,我们可以将两个接口写到一个类下,示例如下:public class DrawListener implements MouseListener,ActionListener{}。
画图板类:
package uL;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
public class DrawBoard {
public void showUI() {
JFrame jf =new JFrame();
jf.setTitle("画图板");
jf.setSize(800,600);
//jf.setLocation(null); 这是个啥东西,报错
jf.setLocationRelativeTo(null);//默认居中
jf.setDefaultCloseOperation(3);//关闭
jf.setResizable(false);//固定大小
FlowLayout fl =new FlowLayout();
jf.setLayout(fl);
DrawListener dl =new DrawListener();//调用DrawListener
String [] drawoption ={"直线","圆","矩形"};
for(int i=0;i<drawoption.length;i++) {
JButton btn = new JButton(drawoption[i]);
jf.add(btn);
btn.addActionListener(dl);
}
//Color c =new Color();
Color [] coloroption = {Color.BLACK,Color.blue,Color.CYAN,Color.gray,Color.GREEN,Color.red};
Dimension dim= new Dimension(30,30);
for(int i=0;i<coloroption.length;i++) {
JButton btn = new JButton();
btn.setBackground(coloroption[i]);
btn.setPreferredSize(dim);
jf.add(btn);
btn.addActionListener(dl);
}
//添加组件
jf.setVisible(true);//可视化
//绑定组件
jf.addMouseListener(dl);
//取画笔
Graphics g =jf.getGraphics();
//System.out.println(g);
dl.g =g;
}
//主函数
public static void main(String[] args){
DrawBoard db =new DrawBoard();
db.showUI();
}
}
监听器类:
package uL;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.Graphics;
public class DrawListener implements MouseListener,ActionListener{
int x1,x2,y1,y2;
Graphics g;
String btnstr="";
ArrayList list = new ArrayList();
public void actionPerformed(ActionEvent e) {
btnstr =e.getActionCommand();//用于获得按钮上的信息
list.add(btnstr);//将从按钮上获得的信息放入数组,可以实现:点击一个线形按钮后,换颜色不需要重新点击线形按钮即可画图
//System.out.println(list);
if (btnstr=="") {
//取颜色 设置给画笔
//按钮对象
JButton btn =(JButton) e.getSource();
Color color = btn.getBackground();//获得颜色按钮信息
g.setColor(color);//将颜色按钮上的颜色赋给画笔
}
}
public void mouseClicked(MouseEvent e) {//点击
//System.out.println("点击");
}
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();
System.out.println(btnstr);
String btnstr1;
btnstr1=(String) list.get(list.size() - 1);
int i=2;
while(btnstr1.contentEquals("")) {
btnstr1=(String) list.get(list.size() - i);
i++;
}
if(btnstr1.equals("直线")) {
//画直线
g.drawLine(x1, y1, x2, y2);
}
else if(btnstr1.equals("圆")) {
//画圆
g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));
}
else if(btnstr1.equals("矩形")) {
//画矩形
g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));
}
}
public void mouseEntered(MouseEvent e) {//进入界面
}
public void mouseExited(MouseEvent e) {//离开界面
}
}
结语:初学Java,还有很多东西不知道,希望大家多多指教。