1

gridlayout の特定の要素 (グリッド?) にアイコンを追加する際に問題があります。私のグリッドレイアウトには、チェス盤として機能することを目的とした 64 個の「レンガ」が含まれています。

私のグリッドコードは次のようになります。

チェス盤

public class SjakkBrett extends JFrame implements Config {

public ChessBoard() {

    setSize(800,800);
    setLayout(new GridLayout(BRICKS/ ROWS, 0) );

    for (int id = 0; id < BRICKS; id++)         
        add(new Brick(id)); 

    setVisible(true);

}

設定

public interface Config {
    public int ROWS= 8;
    public int BRICKS= 64;
}

私の問題は、ボード内の特定のブリックにアイコンを追加する方法が見つからないことです。たとえば、setIcon(new ImageIcon("pawn.png"));作成中のブリック ID の使用方法がわからないなどです。

ここで私を助けてくれる人はいますか?

4

4 に答える 4

4

特定の質問に答えるには:

List<Brick> bricks = new ArrayList<Brick>();

public ChessBoard() {

    setSize(800,800);
    setLayout(new GridLayout(BRICKS/ ROWS, 0) );

    for (int id = 0; id < BRICKS; id++) {
        Brick brick = new Brick(id);        
        add(brick); 
        bricks.add(brick);
    }

    setVisible(true);

}

public void setBrick(int id, int piece) {
    bricks.get(id).setPiece(piece);
}

聞かれなかった質問に答えるために、チェスのゲームについて少し考えてみましょう。

ここに画像の説明を入力

チェス盤にはすでに表記があります。典型的な最初の手は e4 です。駒が特定されていないので、それはポーンを意味します。e4 に移動できる唯一のポーンは、e2 に座っているポーンです。つまり、e4 は「ポーンを e2 から e4 に移動する」という簡単な言い方です。

だから、ボードを作るために並べられたレンガ(正方形)があります。ピースごとに異なるルールに従って、あるブロックから別のブロックに移動できるピースがあります。また、攻略ルールや勝敗を決めるルールも用意しています。

これらの要素はすべて、オブジェクトまたはメソッドとしてゲームに存在する必要があります。

それでは、オブジェクトについて話しましょう。

レンガ(正方形)があります。ボードと呼ばれるレンガの集まりがあります。ピースがあります。

これらのオブジェクトは相互に関連しています。それらに共通するのは、場所のアイデアです。

レンガは特定の場所 (e2) にあります。ボードは、スポット (e2) を意味のあるもの (行 1、列 4。行 0、列 0 が左下隅であると仮定) に変換する方法を知る必要があります。ピースは、どこにあるのか (e2)、合法的にどこに行けるのか (e3、e4)、どこに行くのか (e4) を知る必要があります。

始めるにはこれで十分です。

于 2013-01-31T09:38:36.273 に答える
3

アイコンにラベルを追加すると、後でゲームに移動可能な部分を作成するのが少し簡単になると思いますが、グリッドレイアウトの特定の ID にラベルを追加する方法はまだわかりません。BRICKS は、値 64 が宣言されている (?) Config から情報を取得しているだけです。ここで間違った名前やものを使用していたら申し訳ありませんが、実際に動作するように Java を新しくする方法です。

  • put/getClientPropertyを見てから、任意のアクション/イベントから、KeyboardまたはsMouseXxxListenerの配列から適切な座標を返します。JLabelJButtons

  • 複数個まで可能でput/getClientProperty、制限はありません

  • 私はJButtonAPIで実装さsetXxxIconJLabelれた)を(の呼び出しが必要ですrepaint()MouseMotionListenerの代わりに使用することになります

于 2013-01-31T09:26:54.257 に答える
0

まず、new GridLayout(BRICKS/ ROWS, 0)レイアウトを 0 列に設定しているショーがあります。(API で指定GridLayout(int rows, int cols))

を見つける際の問題については、そのx, y coords必要はありません。プレースホルダー (つまり、カスタム ラベル) がある場合は、背景色をボード セルに対応するように設定し、セルに画像を保持できます。画像は、チェスのルック アンド フィールのために背景の上に設定できます。ラベルにクリックイベントを持たせて、ユーザーがラベルをクリックしたときに、必要なことをすべて行うようにします (ピースをあるセルから別のセルに移動する、プレーヤーがピースを取り、ボードでメイト/チェックメイトをチェックするなど)。 .)

ラベルにとメソッドを実装して、目的MouseListenerの開始ラベルと終了ラベルを取得できます。ドラッグ アンド ドロップ機能が必要な場合は、のメソッドとカスタムメソッドを (ラベルではなく) ボードに実装できます。mousePressedmouseReleasedMouseMotionListenermouseDraggedpaint

于 2013-01-31T09:34:57.127 に答える