暂时禁用MouseListener

时间:2013-02-05 02:54:30

标签: java swing jpanel

我正在使用两个JPanel进行作业。一个面板包含一个默认移动的移动球,另一个面板有两个标有JRadioButtonOn的{​​{1}}个。我坚持的部分是禁用并启用OffMouseListener),允许用户点击面板重新定位球。我创建了使用P2.javaturnOn)触发的函数turnOffActionListener。这会开始和停止球。我试过使用P1.java,但是编译器抛出了我无法使用该方法的错误。

此外,更容易使用this example中的removeActionListener,以便在ItemListener被选中后会被忽略?

P1.java

JRadioButton

P2.java

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class P1 extends JPanel
{
    private JRadioButton on = new JRadioButton("On", true);
    private JRadioButton off = new JRadioButton("Off");

    public P1()
    {
        ButtonGroup group = new ButtonGroup();
        group.add(on);
        group.add(off);

        add(on);
        add(off);

        ButtonHandler bh = new ButtonHandler();
        on.addActionListener(bh);
        off.addActionListener(bh);
    }

    private class ButtonHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent ae)
        {
            if(ae.getSource() == on) turnOn();

            if(ae.getSource() == off) turnOff();
        }
    }

    public static void turnOn () {
        Ball.dx = 1;
        Ball.dy = 1;
    }

    public static void turnOff () {
        Ball.dx = 0;
        Ball.dy = 0;
    }
}

项目的其余部分

2 个答案:

答案 0 :(得分:5)

不看你的代码,我只是让我的MouseListener的行为取决于它的状态。我会给它一个状态布尔变量,比如叫做启用,用getter和setter完成,然后如果启用为false则将代码短路。即,具体方法可能类似于:

public void mousePressed(MouseEvent mEvt) {
  if (!enabled) {
    return;
  }
  // rest of mousePressed goes here
}

另一个建议是,不要这样做:

public class P2 extends JPanel implements MouseListener {

当你要求课程做得太多时,不要让你的GUI类实现你的监听器接口。这对于玩具程序或非常小的演示程序来说是可以的,但是对于大型项目,您需要将您的逻辑从您的视图中分离出来。

答案 1 :(得分:1)

您还可以使用玻璃窗格阻止用户交互

例如:block events