0

私は現在 Connect 4 アプレット ゲームをプログラミングしており、既にすべての AI ロジックを実装しています。今、私は遊ぶことができるように簡単な GUI を設計する必要があります。
使用したいボードの画像 (透明な png) があり、画像をクリックして移動を実行できるようにしたい (たとえば、再生したい特定の列)。

これを行う最善の方法は何ですか?JPanel を拡張するクラスを使用することを考えました。そこには、ボード イメージのペイントを含む、すべてのボタンやその他のものを配置しました。しかし、画像にマウスリスナーを配置できますか??

4

3 に答える 3

4

「しかし、画像にマウスリスナーを配置できますか??」

いいえ、または少なくとも、あなたが考えている文脈ではありません.

達成したいことに応じて、いくつかの選択肢があります。

ただし、基本的な要件は、各クリック ポイントが画像のどこにあるかを正確に知る必要があるということです。これは、画像編集プログラムを使用して「ホット スポット」をマップし、これらをプログラムにコーディングすることによって最もよく達成されます。

あなたは出来る...

を使用しJLabelてボード イメージをレンダリングし、 を添付MouseListenerします。

これで発生する問題は、プレーヤー マーカーを使用して画像を更新する方法を見つけようとすることです。

あなたは出来る...

を使用しJPanelてオーバーライドしpaintComponent、画像とプレーヤーの動き/マーカーをレンダリングします。

次に、 を追加しMouseListenerて、そこからマウスのクリックを監視します。

どの方法を使用したかに関係なく、ユーザーがクリックできるホット スポットを表すListof を作成することになるでしょう。が呼び出されるRectangleたびに、このリストを調べて を使用し、マウス クリック ポイントを渡し、クリックされたホット スポットを特定します。mousePressedRectangle#contains(Point)

次に、これをゲーム モデルと比較して、有効な動きかどうかを判断し、必要に応じて適切なアクションを実行します。

詳細については、マウス リスナーの作成方法カスタム ペインティングの実行を参照してください。

于 2013-07-29T02:39:55.680 に答える
2

JToggleButton4x4(?) で16(?) 個のオブジェクトを使用しますGridLayout

Add a complex image in the panel, with buttons around it in one customized user interfaceの回答に見られるように、ボタンからスペースと背景をノックアウトします。

関連:使い方

アプローチの利点

  • extendコンポーネントは必要ありません。レイアウト、ボタン、コンテナの「バニラ」バージョンを使用できます。これは、継承よりも構成を優先しています。
  • ボタンのアイコンを変えることで、ゲームのロジックを表現することができます。GUI は必要に応じて更新されます。
  • どの画像がクリックされたかを検出するためのすべてのロジックをコーディングする必要がありません。を追加するActionListenerと、ボタンはマウスのフォーカス/クリックまたはキーボードのフォーカス/アクションに応答します。
于 2013-07-29T05:30:50.920 に答える
0

なぜマウスリスナーを画像に追加したいのですか? クラスが mouselistener を実装している場合、マウスがクリックされたときに何をすべきか、またはそれ以外のことを伝えることができます。見てください:

public class Test extends JPanel implements MouseListener {
        .
        .
        .
    @Override
    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub          
    }

    @Override
    public void mouseEntered(MouseEvent arg0) {
        // TODO Auto-generated method stub          
    }

    @Override
    public void mouseExited(MouseEvent arg0) {
        // TODO Auto-generated method stub          
    }

    @Override
    public void mousePressed(MouseEvent arg0) {
        // TODO Auto-generated method stub          
    }

    @Override
    public void mouseReleased(MouseEvent arg0) {
        // TODO Auto-generated method stub          
    }
}
于 2013-07-29T02:38:26.377 に答える