0

私は画像パズルゲームをコーディングしています.コードの一部は、ユーザーが選択したピースを正しい画像のピースと比較することです.

各画像ピースはすでに ImageIcon として JButton に追加されています。

各画像ピースを区別し、比較するためにも識別子が必要です。

識別子として作成された JButton ごとに setName() を設定しています。

比較は、ユーザーがパズルのピースを元の 3x3 グリッド (シャッフルされたピースがある) から他の 3x グリッドにドラッグしてマッチングのためにマウスを離したときに開始されます。

if比較ステートメントからエラーを削除するのに問題があります。

このSOスレッドから比較のアイデアを得ました-リンク

    private JButton[] button = new JButton[9];
    private JButton[] waa = new JButton[9];

    private String id;
    private int cc;
    private String id2;
    private int cc2;

    // setName for each of the 9 buttons in the original 3x3 grid being created 
    // which stores the shuffled puzzle pieces
    for(int a=0; a<9; a++){
        button[a] = new JButton(new ImageIcon());
        id += Integer.toString(++cc);
        button[a].setName(id); 
    }

    // setName for each of the 9 buttons in the other 3x3 grid  
    // where the images will be dragged to by the user
        for(int b=0; b<9; b++){
        waa[b] = new JButton();
        id2 += Integer.toString(++cc2);
        waa[b].setName(id2); 
    }

    // check if puzzle pieces are matched in the correct place
    // compare name of original 'button' array button with the name of 'waa' array buttons 
        button[a].addMouseListener(new MouseAdapter(){

            public void mouseReleased(MouseEvent m){
                if(m.getbutton().getName().equals (waa.getName())){

                    }
                    else{
                         JOptionPane.showMessageDialog(null,"Wrong! Try Again.");
                    }
            }
        }
4

2 に答える 2

3

JButtonを使用しActionListenerて通知をプログラムに戻し、いつトリガーされたかを示します。これにより、マウス、キーボード、プログラム トリガーなど、さまざまな種類のイベントにボタンが応答できるようになります。

アクション API の一部として、各ボタンにアクション コマンドを指定できます。見るJButton#setActionCommand

基本的に、マウスリスナーに似た方法で統合します...

public void actio Performed(ActionEvent evt) {
    if (command.equals(evt.getActionCommand()) {...}
}

要件によっては、Action APIを使用する方が簡単な場合もあります

あなたが実際に抱えている問題はwaa配列であるため、メソッドがありませんgetName。また、ボタンの配列が 2 つある理由も不明です。

于 2013-01-22T07:59:36.333 に答える
3

あなたのmouseReleasedイベントm.getButton()では、クリックされたマウスボタンを返しています。あなたはあなたに近づくために、このようなことをもっとやりたいと思うでしょう:

if (m.getComponent().getName().equals(waa.getName())) {

m.getComponent()イベントが発生したComponentオブジェクト (あなたの) を返します。JButtonそこから、getName使用しているアプローチと比較できます。

waa変数が配列であるという追加の問題があります。配列を実行してインデックスと名前が一致していることを確認するかどうかにかかわらず、それらをどのように比較したいのかわかりませんが、それは検討する必要がある追加の問題です。

于 2013-01-22T07:29:48.110 に答える