2013-04-09 13 views
0

你好,我现在正在做一个简单的游戏,我有它时,你可以在播放屏幕上按Esc来打开菜单。有一个主菜单按钮,可以将您从播放屏幕转到主菜单屏幕,问题是将它们带到主菜单屏幕,然后单击主屏幕上同一位置上的按钮作为游戏名称菜单,因此它可以在您释放按钮之前单击主菜单上的按钮。下面是一些我的班不要点击,直到按钮被释放

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

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

有没有办法让它这样你就可以” t点击另一个按钮,直到释放鼠标按钮?

+2

请张贴SSCEE(http://sscce.org)帮助你的帮手,因为那时帮助你简单得多。 – 2013-04-09 22:52:22

回答

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

类似的东西。

+1

恕我直言 - 按钮上的'MouseListener's很少是一个好主意。我承认可能会需要很少的边缘情况,但我会耗尽我所有的其他选项 - 但这只是我 – MadProgrammer 2013-04-09 23:34:54

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); 
      } 
     }); 
    } 

} 
+0

我使用的游戏库称为slick 2d和lwjgl。我正在使用if语句来检查鼠标位置是否位于打印的按钮图像的区域内(使用像素坐标)并且鼠标按钮是否关闭。我将如何检查鼠标按钮是否打开,以便不会触发其他if语句,直到从第一个if语句释放鼠标按钮。 – Gratin 2013-04-10 21:46:23

+0

您可以在等效的鼠标处理程序中设置一个标志,以便在鼠标向下/向上事件中运行 – MadProgrammer 2013-04-10 23:28:25

+0

对不起,我不完全是java的专家您是什么意思? – Gratin 2013-04-10 23:34:44