我正在使用两个JPanel
进行作业。一个面板包含一个默认移动的移动球,另一个面板有两个标有JRadioButton
和On
的{{1}}个。我坚持的部分是禁用并启用Off
(MouseListener
),允许用户点击面板重新定位球。我创建了使用P2.java
(turnOn
)触发的函数turnOff
和ActionListener
。这会开始和停止球。我试过使用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;
}
}
项目的其余部分
答案 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