想起来高中的时候马菊花老师给我们用VB写的一个有意思的点不到NO的小游戏, 今天自己也写了一个玩一哈~
先上效果:
就是点不到No啦, 只能点Yes ?
点到Yes之后, 显示一些东西;
上代码先:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
public class ActionFrame extends JFrame {
JPanel myWindow;
private static final int DEFAULT_WIDTH = 600;
private static final int DEFAULT_HEIGHT = 600;
public ActionFrame(){
this.setTitle("求婚大作战");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setSize(new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT));
myWindow = new JPanel();
JLabel marry = new JLabel("Do you love me?");
marry.setFont(new Font("DialogInput",Font.BOLD,30));
JButton yes = new JButton("Yes");
JButton no = new JButton("No");
yes.setFont(new Font("DialogInput",Font.BOLD,18));
no.setFont(new Font("DialogInput",Font.BOLD,18));
yes.setLocation(100,100);
no.setLocation(200,100);
myWindow.add(marry);
myWindow.add(yes);
myWindow.add(no);
no.addMouseMotionListener(new MouseMove(no));
yes.addActionListener(e->{
JLabel su = new JLabel("Best wish to you!");
su.setFont(new Font("DialogInput",Font.BOLD,30));
myWindow.setBackground(Color.PINK);
myWindow.removeAll();
myWindow.add(su);
myWindow.validate();
});
this.add(myWindow);
}
public class MouseMove implements MouseMotionListener{
JButton no;
Random rnd = new Random();
public MouseMove(JButton no){
this.no = no;
}
@Override
public void mouseDragged(MouseEvent e){}
@Override
public void mouseMoved(MouseEvent e) {
no.setLocation(rnd.nextInt(480)+20,rnd.nextInt(480)+20);
}
}
public static void main(String[] args) {
new ActionFrame();
}
}
原理也非常简单, 创建一个Label显示文字, 然后创建两个Button 分别是Yes和No
然后在Yes上加一个ActionListener在点击Yes的时候清空面板, 加上一个新的Label显示"Best wish to you";
然后给No加上一个MouseMove的内部类, 支持了MouseMotionListener
接口, 然后实现mouseMoved和mouseDragged方法, 在MouseMove方法里面设置No这个Button的位置为一个固定范围内的随机值, 记得要在构造函数里把这个Button传进来; 因为一旦Move到这个Button上这个Button就会移动, 自然也就不存在Button的mouseDragged问题了~
最后记得点Yes之后要移除之前写的两个Button然后刷新界面, JFrame要刷新界面只能借助于JPanel, 可以用myWindow.validate();
也可以用myWindow.updateUI();
都可以刷新界面, 我尝试用repaint好像是不可以的QAQ
然后就搞定啦, 嘤嘤嘤~