通过随机坐标可实现按钮逃跑(代码如下),但是如果当面板界面足够小的时候,按钮逃跑后随的位置可能会出现在当前鼠标的位置;
那么通过计算按钮框体范围而不去进入到当前鼠标范围的方法该如何实现?
public class EscapeButton extends JFrame {
//设置窗口,按钮大小
private static final int WINDOW_WIDTH = 300;
private static final int WINDOW_HEIGHT = 200;
private static final int BUTTON_WIDTH = 100;
private static final int BUTTON_HEIGHT = 30;
//此方法中,我们初始化界面元素
private void initComponents(){
//获取主内容面板
Container mainPane = this.getContentPane();
//创建一个子面板,边界布局;
JPanel panel = new JPanel(null);
JButton button = new JButton("点我啊!");
button.setBounds((WINDOW_WIDTH - BUTTON_WIDTH) / 2, (WINDOW_HEIGHT - BUTTON_HEIGHT) / 2 - 20, BUTTON_WIDTH, BUTTON_HEIGHT);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(panel, "你点中我了!");
}
});
button.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
//鼠标移入时,让按钮随机逃跑一定距离
int x = (int)(Math.random() * (WINDOW_WIDTH - BUTTON_WIDTH - 20));
int y = (int)(Math.random() * (WINDOW_HEIGHT - BUTTON_HEIGHT - 40));
button.setBounds(x, y, BUTTON_WIDTH, BUTTON_HEIGHT);
}
@Override
public void mouseExited(MouseEvent e) {
}
});
//按钮添加到子面板中
panel.add(button);
//最后,再把子面板,添加到内容主面板中
mainPane.add(panel);
}
public MyFrame(){
//设置窗口标题
this.setTitle("按钮逃跑窗口");
this.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);//设置窗口的大小
this.setResizable(false);//设置不可调整大小
//获取主面板
Container mainPane = this.getContentPane();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时,会结束主线程(程序结束)
initComponents();//添加界面元素
this.setVisible(true);//窗口可见
}
}