1
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

    public class Proyecto_Frame extends JFrame {
    private ImageIcon Aston;
    private ImageIcon Ferrari;
    private ImageIcon Lambo;
    private ImageIcon McLaren;
/**
 * 
 */
    private static final long serialVersionUID = 1L;



        public Proyecto_Frame () {
            super ("Carrera");
            this.setLayout(null);

            Aston = new ImageIcon (getClass().getResource("Aston1.png"));
            Ferrari = new ImageIcon (getClass().getResource("Ferrari1.png"));
            Lambo = new ImageIcon (getClass().getResource("Lambo1.png"));
            McLaren = new ImageIcon (getClass().getResource("McLaren1.png"));

            final JLabel Aston1 = new JLabel(Aston);
            final JLabel Ferrari1 = new JLabel(Ferrari);
            final JLabel Lambo1 = new JLabel(Lambo);
            final JLabel McLaren1 = new JLabel(McLaren);

            final JLabel Aston2 = new JLabel(Aston);
            final JLabel Ferrari2 = new JLabel(Ferrari);
            final JLabel Lambo2 = new JLabel(Lambo);
            final JLabel McLaren2 = new JLabel(McLaren);

            JButton B_Aston = new JButton (Aston);
            JButton B_Ferrari = new JButton (Ferrari);
            JButton B_Lambo = new JButton (Lambo);
            JButton B_McLaren = new JButton (McLaren);

            B_Aston.setBounds(new java.awt.Rectangle(30,30,230,75));
            this.getContentPane().add(B_Aston);

            B_Ferrari.setBounds(new java.awt.Rectangle(270,30,230,75));
            this.getContentPane().add(B_Ferrari);

            B_Lambo.setBounds(new java.awt.Rectangle(30,110,230,75));
            this.getContentPane().add(B_Lambo);

            B_McLaren.setBounds(new java.awt.Rectangle(270,110,230,75));
            this.getContentPane().add(B_McLaren);

            add(B_Aston);
            add(B_Ferrari);
            add(B_Lambo);
            add(B_McLaren);

            Aston1.setBounds(30, 250, 230, 75);
            Aston1.setVisible(false);
            Ferrari1.setBounds(30, 250, 230, 75);
            Ferrari1.setVisible(false);
            Lambo1.setBounds(30, 250, 230, 75);
            Lambo1.setVisible(false);
            McLaren1.setBounds(30, 250, 230, 75);
            McLaren1.setVisible(false);

            Aston2.setBounds(30, 350, 230, 75);
            Aston2.setVisible(false);
            Ferrari2.setBounds(30, 350, 230, 75);
            Ferrari2.setVisible(false);
            Lambo2.setBounds(30, 350, 230, 75);
            Lambo2.setVisible(false);
            McLaren2.setBounds(30, 350, 230, 75);
            McLaren2.setVisible(false);

            add(Aston1);
            add(Ferrari1);
            add(Lambo1);
            add(McLaren1);

            add(Aston2);
            add(Ferrari2);
            add(Lambo2);
            add(McLaren2);

            B_Aston.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e){
                    Aston1.setVisible(true);
                    Ferrari1.setVisible(false);
                    Lambo1.setVisible(false);
                    McLaren1.setVisible(false);
                }
            });
            B_Ferrari.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e){
            Aston1.setVisible(false);
            Ferrari1.setVisible(true);
            Lambo1.setVisible(false);
            McLaren1.setVisible(false);
            }
            });
            B_Lambo.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e){
                    Aston1.setVisible(false);
                    Ferrari1.setVisible(false);
                    Lambo1.setVisible(true);
                    McLaren1.setVisible(false);
                }
            });
            B_McLaren.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e){
                    Aston1.setVisible(false);
                    Ferrari1.setVisible(false);
                    Lambo1.setVisible(false);
                    McLaren1.setVisible(true);

                }

            });

        }

    }

ねえ、私はJavaを初めて使用し、このコードを入手しました。ですから、ここでの質問は、レースをシミュレートするために、これらの画像のうち2つを選択し、ボタンの下にペイントしたいということです。いずれかのJbuttonをクリックすると、その画像は表示され、他の3つは表示されませんが、その選択をそのままにして、同じJButtonで次の選択を行う方法がわかりません。誰か助けてもらえますか?私は多くのスレッドと他の多くのページを読みましたが、答えが見つからないようです。

フォーラムのフォーマットに慣れていないフォーマットに感謝し、申し訳ありません。

4

3 に答える 3

2

最も簡単な方法は、たとえば、最初の選択がすでに行われている場合は、2番目の選択を行うことを確認することだと思います。

if (playerA == null) {
    playerA = buttonSelection;
} else {
    playerB = buttonSelection;
}

また、どのボタンで何を選択しているかをユーザーに指示する方法も必要です。

于 2012-04-21T17:52:54.620 に答える
2

考えられる解決策の1つ(私が特に気に入らないもの)は、ブール値または他の変数を使用してプログラムの状態を保持することです。たとえば、boolean autoSelected=false;と呼ばれます。自動が選択されたら、この変数をtrueに変更します。JButtonのActionListenerで、ifブロックを使用して、この変数の状態に基づいてコードが実行する必要があることを決定します。つまり、プログラムの状態に応じて、JButtonが実行するアクションを変更します。

私の考えでは、CardLayoutを使用してJPanelを交換し、トラックと新しいJButtonを保持するJPanelを表示する方がよいでしょう。これは、プログラムの1つの主要な状態(ゲームのセットアップ)から別の状態(レースを表示)に変更しているためです。これらは、完全に異なるJPanelで表示する必要がある可能性があります。

于 2012-04-21T17:53:10.080 に答える
1

JListこのために、私はその下に障害者がいるを使用する傾向がありますJButton Start Race

画像をリストに入れ、リスト選択リスナーを追加して選択を検出します。選択が変更されたら、選択された値の配列(1.6)または選択された値のリスト(1.7+)のリストを確認し、エントリをカウントします。

  1. 数が1に等しい場合は、ユーザーに別のものを選択するように促します(JLabelメインGUIのメッセージ、ポップアップウィンドウ、またはを使用してJOptionPane)。
  2. 数が2に等しい場合は、ボタンを有効にします。
  3. 3つ以上を選択した場合は、ボタンを無効にJOptionPaneして、「このトラックは3台の車には十分な大きさではありません!」というエラーメッセージを表示します。
于 2012-04-22T05:08:57.120 に答える