Event Listener-2

来源:互联网 发布:好布业软件jshby 编辑:程序博客网 时间:2024/04/28 00:02
使用事件监听器event listener的接口处理事件,创建监听器对象使之与组件关联

package swing;

import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

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

public class PrankPanel extends JPanel implementsMouseMotionListener{
    JButton ok = new JButton("OK");
    int buttonX,buttonY,mouseX,mouseY;
    int width,height;
    PrankPanel(){
         super();
         setLayout(null);
         addMouseMotionListener(this);
         buttonX = 10;
         buttonY = 10;
    //绘制一个指定大小区域的按钮①
         ok.setBounds(new Rectangle(buttonX,buttonY,70,20));
         add(ok);
    }
    public void mouseMoved(MouseEvent evt){
         mouseX = evt.getX();
         mouseY = evt.getY();

         width = (int)getSize().getWidth();
         height = (int)getSize().getHeight();
    //当得到的鼠标X位置与按钮相距少于100时,moveButton,重绘界面
         if(Math.abs((mouseX+35) - buttonX)<100){
              buttonX = moveButton(mouseX,buttonX,width);
              repaint();
         }
         if(Math.abs((mouseY+35) - buttonY)<100){
              buttonY = moveButton(mouseY,buttonY,height);
              repaint();
         }
    }
    public void mouseDragged(MouseEvent evt){
          
    }
    //根据按钮和鼠标位置,移动按钮
    private int moveButton(int mouseAt,int buttonAt,int border){
         if(buttonAt
              buttonAt--;
         }else{
              buttonAt++;
         }
         if(buttonAt>(border - 20)){
              buttonAt = 10;
         }
         if(buttonAt<0){
              buttonAt = border - 80;
         }
         return buttonAt;
    }
    public void paintComponent(Graphics comp){
         super.paintComponent(comp);
         ok.setBounds(buttonX,buttonY,70,20);
    }
}

package swing;

import java.awt.BorderLayout;
import java.awt.Insets;
import java.awt.event.*;

import javax.swing.*;

public class MousePrank extends JFrame implementsActionListener{
    public MousePrank(){
         super("点确定");
          
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          
         setSize(500,400);
         BorderLayout border = new BorderLayout();
         setLayout(border);
         JLabel message = new JLabel("点击关闭程序");
         add(BorderLayout.NORTH,message);
//创建一个按钮
         PrankPanel prank = new PrankPanel();
//为按钮添加监听器
         prank.ok.addActionListener(this);
         add(BorderLayout.CENTER,prank);
         setVisible(true);
    }
//点击确定,退出
    public void actionPerformed(ActionEvent evt){
         System.exit(0);
    }
    public Insets getInsets(){                   //②
         return new Insets(40,10,10,10);
    }
    public static void main(String[] args) {
         new MousePrank();
    }
}


/使用通配符导入整个包java.awt.event.*;
①Rectangle 指定坐标空间中的一个区域,通过坐标空间中 Rectangle 对象左上方的点(x,y)、宽度和高度可以定义这个区域。
其构造函数Rectangle(intx, int y, int width, int height) 
②Insets  对象描述容器的边界区域。它指定一个容器在它的各个边界上应留出的空白区间。这个空白可以是一个边界,一个不显示区域或一个标题。
变量索引 
bottom  
底部的空白宽度。  
left  
左边的空白宽度。  
right  
右边的空白宽度。  
top  
顶部的空白宽度
0 0
原创粉丝点击