2017-03-16 12 views
2

私は高校のJavaプログラミングクラスの戦艦ゲームで作業しています。これまで私はコンピュータとプレーヤーの両方のゲームボードを持っていました。私はコンピュータのための船を生成し、プレーヤーがそれらを沈めることができることを確かめました。両方のボードにはグリッドレイアウトがあり、それぞれがプレーヤとコンピュータの両方の2D配列に割り当てられ、特定のグリッドレイアウトの一部です(正に、コードは教師から提供されたものなので、どの部分が関連しているのか、そうでない部分があるのか​​は分かりません。どのボタンがJavaでクリックされましたか?

ここで私がやりたいことは、ボードをクリックして開始場所を選んでプレイヤーに船を置くことです。

inside of a for loop 
      1: a button in buttonsPlayer is clicked 
      2: when a button is clicked, the two coordinates are calculated and stored as x, y coordinates 
      3: a ship is generated with the starting coordinates of x, y 

私はこれまでに行ったようにランダムなx座標とy座標を持つ船を生成する方法を知っています。ボタンをクリックした後に配列のボタンの番号を取得する方法はありますか?

は(私は同じ質問をするように見え、ここに5つの他のスレッドなどを介して読みましたが、私は本当に答えのいずれかを得ることはありません)

答えて

0

あなたはextends JButtonというクラスを作成することができますし、より多くの機能が追加されますそのようなJButtonへ:

public class BoardPiece extends JButton{ 
    private int x,y; 
    //rest of class including getters and setters 
} 

これに伴いJButtonのすべての機能をもたらすでしょう、あなたはそれぞれの正方形についての本質的メタデータの中に追加することができます。

その後、あなたのイベントリスナーにあなただけのとても.getX().getY()などを呼び出すことができるようになります:

boardPiece.addActionListener((e)->{ 
    BoardPiece clicked = (BoardPiece)e.getSource(); 
    int x = clicked.getX(); 
    // and so on 

}); 
0

A JButtonのは、あなたが他からそれをdistinquishすることで情報を配置することができます「アクションコマンド」を持っていますボタン。だから、

JButton.setActionCommand 
JButton.getActionCommand 

を使用して

あなたのactionListenerに、その文字列にそのボタンの座標をエンコードする場合は、

JButton b = (JButton) eventListener.getSource(); 

String cmd = b.getActionCommand(); 

をすることができ、その後のプロセスCMDあなたがボード上のどこにいるかを把握するための文字列。

0

JButtonにActionCommandを付けることができます。あなたがにButtonPressをリッスンするActionListenerを実装する場合、あなたはbuttonidの値をチェックすることによって

@Override 
    public void actionPerformed(ActionEvent ae) { 
     String buttonid = ae.getActionCommand(); 
    } 

のようなコードを書くことができます

JButton button1 = new JButton("Button 1"); 
    button1.setActionCommand("Button1id");` 

その後、あなたはどのボタンが押された知ることができます。

+0

setActionCommandの "Button1id"とはどういう意味ですか?行動を特定するのは単なる名前ですか、それとも特定のものである必要がありますか? –

+0

それはそれを特定するためのものです。任意の文字列を指定できます。あなたは、あなたが解析することができるようないくつかのデータをそこに入れることができます。 –

関連する問題