在按钮释放之前不要单击

时间:2013-04-09 22:47:46

标签: java button lwjgl slick

你好我现在正在做一个简单的游戏,当你在播放屏幕上按esc打开菜单时我就可以了。有一个主菜单按钮,可以将您从播放屏幕带到主菜单屏幕,问题是它们是否进入主菜单屏幕,然后点击主屏幕上与该屏幕相同位置的按钮菜单,所以它在您能够释放按钮之前单击主菜单上的按钮。以下是我的一些课程

这是我的菜单类(主屏幕)http://pastebin.com/kc5Dx2bp

这是我的游戏类(播放屏幕)http://pastebin.com/Gr3y9Amj

有没有办法让它在释放鼠标按钮之前无法点击另一个按钮?

2 个答案:

答案 0 :(得分:1)

基本上,您可以使用ButtonModel跟踪按钮状态的更精细更改,然后ActionListener为您提供。

此示例监控模型的armedpressed状态,并根据特定条件采取措施。

这是一个小技巧,因为您正在寻找的状态不仅会在释放按钮时出现,而且还会在按下第一个按钮时出现。我们所做的是等到上一个状态按下按钮并且按钮pressed状态为false,然后我们知道我们有一个按钮释放

import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.ButtonModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class TestButton05 {

    public static void main(String[] args) {
        new TestButton05();
    }

    public TestButton05() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                final JButton btn = new JButton("Clicked");
                btn.getModel().addChangeListener(new ChangeListener() {
                    private boolean wasPressed = false;
                    @Override
                    public void stateChanged(ChangeEvent e) {
                        ButtonModel model = (ButtonModel) e.getSource();
                        if (model.isArmed() && !model.isPressed() && wasPressed) {
                            System.out.println("Released");
                        } else {
                            wasPressed = model.isPressed();
                        }
                    }
                });

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridBagLayout());
                frame.add(btn);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

答案 1 :(得分:0)

  1. 在您的类中创建一个名为canClick的布尔值。
  2. 创建MouseListener。
  3. 将MouseListener添加到每个按钮(button.addMouseListener(...);)
  4. 在MouseListener中,实现所有需要的方法。
  5. 根据需要在每种方法中将布尔值设置为true或false。
  6. 单击按钮(ActionListener)时,请检查布尔值。
  7. 如果为false,则取消它(或者只禁用所有按钮,直到为真)
  8. 类似的东西。