2012-03-14 11 views
0

私は次のクラスでいくつかのインタラクタを使用しています。それらのすべては完全に機能する、すなわち、彼らは私が望むことを行う。しかし、視覚的には機能しません。例えば、画面をクリアするためのJButtonを押すと、JButtonは押されません。これはJButtonでは問題ありませんが、ラジオボタンでは問題があります。ラジオボタンをクリックして切り替えると、画面上で何が起こっているのかを切り替えることができますが、ラジオボタンの選択は切り替わりません。なぜこうなった?私は何時間もコードを見つめて、それを理解することはできません。 (私の説明がはっきりしていればいいと思いますが...コードはここにあります...)。 acmライブラリのドキュメントはhereです。JButtonが視覚的に機能しません

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

すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 –

+0

数千文字を削除しました。それが問題の一部である場合にスイングインタラクタの初期化を取り除きたくはありませんが、それでも短縮しようとしました。 – rbharvs

+0

どこかの誰かのようなサウンドは、repaint()を正しく呼び出すことができません。 –

答えて

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からダウンロードしました(2番目のバージョンでは無料の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

0

私はまったく同じ問題を抱え、Googleで大きな問題を抱えていました。 SOUTHとEASTポジションはうまく機能しませんでしたが、NORTHとWESTは問題ありませんでした。

次に、私がソース(http://cs.stanford.edu/people/eroberts/jtf/acm.jar)からacm.jar(315 KB)ファイルをダウンロードするためのmgusの回答が見つかりました。私は、明らかに異なるスタンフォードCS106A acm.jar(406 KB)を使用しました。

問題が解決しました。

関連する問題