JButton在视觉上不起作用

时间:2012-03-14 02:57:15

标签: java swing jbutton acm-java-libraries

我在下面的课程中使用了一些交互者。所有这些功能都很完美,即它们可以满足我的需求。但是,它们在视觉上不起作用。例如,当我按下用于清除屏幕的JButton时,它会这样做,但是JButton没有按下。这对于JButton来说很好,但是对于Radio Buttons来说它会带来一个问题。当我点击切换单选按钮时,我可以切换屏幕上发生的事情,但单选按钮的选择不会切换。为什么会这样?我已经盯着代码几个小时了,只是想不出来。 (我希望我的描述很清楚......这是代码......)。可以找到acm库的文档here

package forces;

import java.util.*;
import javax.swing.*;
import acm.graphics.*;
import java.awt.event.*;

public class InteractiveClosedSystem extends ClosedSystem {

    private GOval newMass;
    private JRadioButton positiveRB;
    private JRadioButton negativeRB;

    public void init() {

        masses = new ArrayList<Mass>();

        add(new JButton("Clear"), SOUTH);

        initRadioButtons();

        addActionListeners();
        addMouseListeners();
        addKeyListeners();
    }

    private void initRadioButtons() {

        // Radio button group for charge
                ButtonGroup chargeBG = new ButtonGroup();
        positiveRB = new JRadioButton("Positive");
        negativeRB = new JRadioButton("Negative");

        // Add all radio buttons to button group
        chargeBG.add(positiveRB);
        chargeBG.add(negativeRB);

        // Set initial radio button selection
        positiveRB.setSelected(true);

        // Add all radio buttons to control bar
        add(new JLabel("     Charge"), SOUTH);
        add(positiveRB, SOUTH);
        add(negativeRB, SOUTH);
    }

    public void actionPerformed(ActionEvent e) {

        String cmd = e.getActionCommand();
        if (cmd.equals("Clear")) {
            masses.removeAll(masses);
            removeAll();
        }
    }

    public void mouseClicked(MouseEvent e) {

        newMass = new GOval(e.getX(), e.getY(), 30, 30);

        newMass.setFilled(true);
        if (positiveRB.isSelected()) {
        newMass.setColor(Mass.POSITIVE_COLOR);
        } else {
        newMass.setColor(Mass.NEGATIVE_COLOR);
        }

        add(newMass);
    }
}

2 个答案:

答案 0 :(得分:0)

我对这些交互者有同样的问题。由于acm包相对较旧,因此它不适用于JRE的新Java 1.5库,如1.6或1.7。我从这里下载了这个版本: http://www.filehippo.com/download_jre_32/3446/或者这里:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase5-419410.html(您需要为第二个版本提供免费的Oracle帐户),并且交互者现在可以正常工作。如果在安装后使用Eclipse,则继续执行项目:Right click -> Properties -> Java Build Path -> Libraries (tab) -> Add Library -> JRE System Library -> Next -> Installed JREs -> Add -> Standard VM -> Next -> Directory e.g. C:\Program Files (x86)\Java\jre1.5.0_10 -> Finish -> Check the jre1.5.0_10 box -> OK -> Finish -> OK

答案 1 :(得分:0)

我遇到了完全相同的问题,并且在Google中使用它时遇到了很大的麻烦。南部和东部的位置都不起作用,而北部和西部的情况很好。

然后我找到了来自mgus的答案,这使我从源(http://cs.stanford.edu/people/eroberts/jtf/acm.jar)下载了acm.jar(315 KB)文件。我使用了斯坦福CS106A acm.jar(406 KB),这显然是不同的。

问题解决了我。