使用事件监听器event listener的接口处理事件,创建监听器对象使之与组件关联
//绘制一个指定大小区域的按钮①
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);
}
}
bottom
底部的空白宽度。
left
左边的空白宽度。
right
右边的空白宽度。
top
顶部的空白宽度
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 implements MouseMotionListener{
JButton ok = new JButton("OK");
int buttonX,buttonY,mouseX,mouseY;
int width,height;
PrankPanel(){
super();
setLayout(null);
addMouseMotionListener(this);
buttonX = 10;
buttonY = 10;
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 implements MouseMotionListener{
}
package swing;
import java.awt.BorderLayout;
import java.awt.Insets;
import java.awt.event.*;
import javax.swing.*;
public class MousePrank extends JFrame implements ActionListener{
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);
import java.awt.BorderLayout;
import java.awt.Insets;
import java.awt.event.*;
import javax.swing.*;
public class MousePrank extends JFrame implements ActionListener{
//创建一个按钮
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(int x, int y, int width, int height)
②Insets
对象描述容器的边界区域。它指定一个容器在它的各个边界上应留出的空白区间。这个空白可以是一个边界,一个不显示区域或一个标题。
变量索引 bottom
底部的空白宽度。
left
左边的空白宽度。
right
右边的空白宽度。
top
顶部的空白宽度