0

すでに回答されている可能性のある他の質問をいくつか調べましたが、私に関連するものは何も見られませんでした。少なくとも私が理解したものはありませんでした.

信号機を作成しようとしていますが、ボタンをクリックしたときに実際に赤緑と黄色の円を描くのに問題があります。迅速な回答をいただければ幸いです。

public class TrafficLight extends JApplet implements ActionListener {

   private Image Hayden;

    JButton btn1;

    JButton btn2;

    JButton btn3;

    int x;

public void init() {

    setLayout(new FlowLayout());

    btn1 = new JButton("Stop");

    btn2 = new JButton("Wait");

    btn3 = new JButton("Go");

    Boolean Answer;

    add(btn1);

    btn1.addActionListener(this);

    add(btn2);

    btn2.addActionListener(this);

    add(btn3);

    btn3.addActionListener(this);

    Hayden = getImage(getDocumentBase(), "49.jpg");
}

public void actionPerformed(ActionEvent event){

    if (event.getSource()==btn1){
        boolean one = true;
    }
    if (event.getSource()==btn2){
        boolean two = true;
    }
    if (event.getSource()==btn3){
        boolean three = true;
    }
    repaint();

}
public void paint(Graphics g) {

    super.paint(g);

    g.setColor(Color.black);

    g.drawRect(0, 400, 700, 200);//creating the rectangle
    g.fillRect(0, 400, 700, 200);

    g.setColor(Color.black);
    g.drawRect(645, 0, 55, 155);//creating the rectangle
    g.fillRect(645, 0, 55, 155);

    g.setColor(Color.white);
    g.drawOval(650, 5, 45, 45);//creating the oval
    g.fillOval(650, 5, 45, 45);

    g.setColor(Color.white);
    g.drawOval(650, 55, 45, 45);//creating the oval
    g.fillOval(650, 55, 45, 45);

    g.setColor(Color.white);
    g.drawOval(650, 105, 45, 45);//creating the oval
    g.fillOval(650, 105, 45, 45);
    if (one == true){
        g.setColor(Color.red);
        g.drawOval(650,5,45,45);
    }
    else if (two == true){
        g.setColor(Color.red);
        g.drawOval(650,55,45,45);
    }
    else if (three == true){
        g.setColor(Color.red);
        g.drawOval(650,105,45,45);
    }
    g.drawImage(Hayden, 0, 500, 150, 100, this);//create the image

}


}
4

2 に答える 2

1

isSelected()メソッドは、トグル ボタンに関連しています。あなたの場合actionPerformed()、どの条件も真を返すことはありません。迅速で汚い修正は、イベントのソースを確認することです。つまり、次のようになります。

if (event.getSource() == btn1){
    x = 5;
}

クリーナーは次のようになります。

btn1.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        x = 5;
    }
});

別の注意として、JPanel または JComponent でカスタム ペイントを行ってから、コンポーネントを JApplet のコンテンツ ペインに追加します。詳細については、レッスン: カスタム ペインティングの実行を参照してください。

また、絶対レイアウトではなく、レイアウト マネージャーを使用することをお勧めします。詳細については、 A Visual Guide to Layout Managersを参照してください。

一般的なガイドラインについては、アプレットの作成方法のチュートリアルを必ず確認してください。

編集:に関して

少し減らしてください。うまくいけば悪くはありません}

最後の編集は正しくありません。コンパイルできません。ローカル変数を宣言しboolean one = true;ていて、それを別のメソッドで使用しようとしています。クラスboolean oneのメンバーを作成します。twoおよびthree変数と同じです。

于 2012-07-24T00:26:11.830 に答える
0

注意が必要なのは、変数のスコープです。ブール値の one、two、および three は、それぞれの if ステートメント内にスコープがあります。これらのブール値インスタンス変数を作成すると (int x やボタンなどのクラスの上部に変数を作成します)、スコープはクラス全体になり、各メソッドで参照できます。

JButton btn2;
JButton btn3;
boolean one, two three;

現在のところ、これらのブール値には、ペイント メソッドを含め、それぞれの if ステートメントに含まれていないものからはアクセスできません。

于 2012-07-24T01:07:36.120 に答える