事件的监听和简单画板的制作_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 事件的监听和简单画板的制作

事件的监听和简单画板的制作

 2013/11/18 6:18:49  SWAC  程序员俱乐部  我要评论(0)
  • 摘要:做好了一个漂亮的面板,要实现一个面板的运作,使之成为一个合格的程序,还需要描述各个组件的具体功能,一个按钮从按下到一个事件的发生,看似很简单,实际却牵动了大量的程序过程:(1)首先要知道触发这个事件的是那一个具体的组件,也就是外部输入发生动作的地方,称之为事件源。(2)知道了事件源,然后要添加一个监听器,来监视这个事件源,看是否有动作发生在这上面。(3)动作一旦发生,监听器就会发送信号,我们需要创建一个事件处理类,来处理这个发来的信号,在事件处理类中,添加对这个信号的处理方式
  • 标签:事件 监听
做好了一个漂亮的面板,要实现一个面板的运作,使之成为一个合格的程序,还需要描述各个组件的具体功能,一个按钮从按下到一个事件的发生,看似很简单,实际却牵动了大量的程序过程:
(1)首先要知道触发这个事件的是那一个具体的组件,也就是外部输入发生动作的地方,称之为事件源。
(2)知道了事件源,然后要添加一个监听器,来监视这个事件源,看是否有动作发生在这上面。
(3)动作一旦发生,监听器就会发送信号,我们需要创建一个事件处理类,来处理这个发来的信号,在事件处理类中,添加对这个信号的处理方式,这就是按钮所触发的事件。
(4)最后把事件监听处理类绑定到事件监听器对象上,一个组件的功能就实现了。


制作一个简单地画板:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Drawing {

/**
* @param args
*/
private String actionName;
//主函数入口
public static void main(String[] args) {
// TODO Auto-generated method stub
//建立界面对象
Drawing  gui =new Drawing();
gui.InitGUI();//调用界面方法
}
//实例化界面方法
public void InitGUI(){
JFrame jf =new JFrame("画图板");
jf.setSize(800,450);//设置界面大小
jf.setDefaultCloseOperation(3);//设置可以关闭
jf.setLocationRelativeTo(null);//设置界面居中显示

JPanel jp1 =new JPanel();//创建一个面板
jp1.setPreferredSize(new Dimension(0,50));//设置面板大小
//创建图形属性值选择项按钮
JButton lin =new JButton("line");

JButton rec =new JButton("rect");

JButton ova =new JButton("oval");

JButton rou =new JButton("roundrect");

JButton pol =new JButton("poly");

//添加图形属性值按钮到面板
jp1.add(lin);

jp1.add(rec);

jp1.add(ova);

jp1.add(rou);

jp1.add(pol);

jf.add(jp1,BorderLayout.NORTH);//添加面板到布局

JPanel jp2 =new JPanel();//新建一个面板

jp2.setBackground(Color.WHITE);//设置背景颜色为白色

jf.add(jp2,BorderLayout.CENTER);//将jp2面板添加到中间布局

jf.setVisible(true);//设置窗体可见

Graphics g = jp2.getGraphics();//获取该事件源面板的绘图工具

//this在此构造方法内表示当前Drawing类的对象,不可换成该对象的对象名
DrawingEvents de= new DrawingEvents(this,g);

jp2.addMouseListener(de);

ActionListener al =new ActionListener(){

public void actionPerformed(ActionEvent e) {
actionName = e.getActionCommand();
}
};
lin.addActionListener(al);
pol.addActionListener(al);
rou.addActionListener(al);
ova.addActionListener(al);
rec.addActionListener(al);


}

public String getActionName(){
return actionName;
}
}
—————————————————————————————————————————

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawingEvents implements MouseListener{
private int x1,x2,y1,y2;
private Drawing gui;
private Graphics g;

public DrawingEvents (Drawing gui,Graphics g){
this.g =g;
this.gui=gui;
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标单击");

}

@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("鼠标移除");
}

@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();
if(gui.getActionName().equals("line")){
System.out.println(gui.getActionName());
g.drawLine(x1, y1, x2, y2);
}
else if(gui.getActionName().equals("rect")){
System.out.println(gui.getActionName());
if(x2>=x1){
if(y2>=y1){
g.drawRect(x1, y1, x2-x1,y2-y1);
}
else{
g.drawRect(x1, y2, x2-x1,y1-y2);
}
}
else if(y1>=y2){
g.drawRect(x2, y2, x1-x2,y1-y2);
}
else{
g.drawRect(x2, y1, x1-x2,y2-y1);
}
}
else if(gui.getActionName().equals("oval")){
System.out.println(gui.getActionName());
if(x2>=x1){
if(y2>=y1){
g.drawOval(x1, y1, x2-x1,y2-y1);
}
else{
g.drawOval(x1, y2, x2-x1,y1-y2);
}
}
else if(y1>=y2){
g.drawOval(x2, y2, x1-x2,y1-y2);
}
else{
g.drawOval(x2, y1, x1-x2,y2-y1);
}
}
else if(gui.getActionName().equals("roundrect")){
System.out.println(gui.getActionName());
if(x2>=x1){
if(y2>=y1){
g.drawRoundRect(x1, y1, x2-x1,y2-y1,40,40);
}
else{
g.drawRoundRect(x1, y2, x2-x1,y1-y2,40,40);
}
}
else if(y1>=y2){
g.drawRoundRect(x2, y2, x1-x2,y1-y2,40,40);
}
else{
g.drawRoundRect(x2, y1, x1-x2,y2-y1,40,40);
}
}
}
}
在这个过程中,最容易出现空值问题,所以要仔细把握传参数的过程,可能对一个接触JAVA不久的人来说,对于引用传递和参数传递的理解会是个很大的问题,但随着代码量的积累,应该会渐渐理解其中的含义
  • lesson06.zip (2.9 KB)
  • 下载次数: 0
发表评论
用户名: 匿名