要创建一个画图板,首先要先创建一个界面
创建界面
好的,先让我们再为我回顾一下如何创建界面(敢情是真的没记得多少了)
- 先打开一个class,命完名后,我习惯性的先写好主函数,再等会儿,将现在写的这个类实例化,再将下面写的界面方法进行调用。
- 然后,可以开始简单地写下这个界面的方法了。可以直接继承JFrame,也可以对象实例化JFrame,再接着引用里面的方法。
- 照例简单的给界面命名,设置大小,可关闭,居中显示,此处再添加边框布局,先实例化,再设置大小,颜色,再添加到界面,最后进行可视化。
- 相关关键词
- 继承:public class DrawPad extends JFrame{ }
- 对象实例化:JFrame jf = new JFrame( );
- 命名:jf.setTitle(“DrawPad”);
- 设置大小:jf.setSize(900,800);
- 可关闭:jf.setDefaultCloseOperation(3);
- 居中显示:jf.setLocationRelativeTo(null);
- 边框布局:
JPanel jpc = new JPanel();
jpc.setPreferredSize(new Dimension(850,700));
jpc.setBackground(new Color(135,206,250));
jf.add(jpc1); - 可视化:jf.setVisible(true);
创建监听器
- 再创建一个类,明了名后,在名字后面用 implements 来实现鼠标监听器MouseListener的接口,在这个类里重载鼠标监听器里的方法。方法里有:鼠标点击、按下、释放、进入、离开。
- 在各种方法上面,先声明下画笔,以便在所有的方法里调用。
- 先简单画个矩形
- 在监听器重载的 按下 方法中获取起始点,再在 释放 方法中获取离开点。然后可在 释放 的方法里画矩形了。
- 将刚刚获取的两点用上,并调用取最小值Math.min()和取绝对值Math.abs来编写矩形。
在界面里添加监听器
在可视化后,在需要绘画的界面中先获取画笔,再实例化刚刚创建的监听器类,在界面中添加监听器,再将界面中的画笔跟监听器中的画笔实现传值,完成监听。然后,矩形就可以画出来了。
简单的代码如下
界面的代码
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class RedrawPad {
public static void main(String[] args){
RedrawPad ui = new RedrawPad();
ui.UI_1113();
}
public void UI_1113(){
JFrame jf = new JFrame();
jf.setTitle("my draw");
jf.setSize(900,800);
jf.setDefaultCloseOperation(3);
jf.setLocationRelativeTo(null);
JPanel jpn = new JPanel();
jpn.setPreferredSize(new Dimension(850,100));
jpn.setBackground(new Color(152,251,152));
JPanel jpc1 = new JPanel();
jpc1.setPreferredSize(new Dimension(850,690));
jpc1.setBackground(new Color(255,250,205));
JPanel jpc2 = new JPanel();
jpc2.setPreferredSize(new Dimension(800,650));
jpc2.setBackground(new Color(135,206,250));
jf.add(jpc1);
jpc1.add(jpn);
jpc1.add(jpc2);
jf.setVisible(true);
Graphics g = jpc2.getGraphics();
Pad_Listener pl = new Pad_Listener();
jpc2.addMouseListener(pl);
pl.gl=g;
}
}
监听器类的代码
package com.qjx1113.redrawPad;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class Pad_Listener implements MouseListener{
Graphics gl;
int x_start,y_start,x_end,y_end;
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
x_start = e.getX();
y_start = e.getY();
}
public void mouseReleased(MouseEvent e) {
x_end = e.getX();
y_end = e.getY();
gl.drawRect(Math.min(x_start,x_end),Math.min(y_start,y_end),Math.abs(x_start-x_end), Math.abs(y_start-y_end));
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}