0

GUIを使用してボードを構築しています(ボードゲームかもしれません)。五目並べゲームのようなセルを作るために二次元配列を作成しました。この機能を作りたい:セルをクリックするたびに、セルの位置が表示されます。

private Cell[][] cells;
private in row;
private int col;

Update:
.......

JPanel pn = new JPanel(new GridLayout(row, col, 0, 0));
cells = new Cell[row][col];
for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            pn.add(cells[i][j] = new Cell());
        }
......
private class MouseListener extends MouseAdapter {

        public void mouseClicked(MouseEvent e) {
                    for (int i = 0; i < size; i++) {
                        for (int j = 0; j < size; j++) {
                            if (         ) {
                                System.out.println("X: " + i + ", Y: " + j);

                            }

                        }
                    }
            }

何度か試してみましたが、条件が異なりますが、うまくいきませんif

4

3 に答える 3

0

画面に何が表示されているかをあまり知らなくても、次のように適用できます。キャンバスの端からセルをレンダリングした場所までのオフセットがない限り、以下を使用できます。オフセットがある場合は、x、y 座標に追加する必要があります。

int x = 201;  //You would use e.getX();
int y = 10;   //You would use e.getY();

int xWidth = 50;
int yWidth = 50;

//Divide by the width to get the array position
int xIndex = (int)Math.floor(x / xWidth);
int yIndex = (int)Math.floor(y / yWidth);
于 2013-07-21T22:49:40.317 に答える
0

ifステートメントには、ヒット テスト関数呼び出しが必要です。ヒット テスト関数は、現在の (i,j) 位置のマウス座標からセル座標に変換し、単純なtrueorを返す必要がありfalseます。(そして、 を取得するとすぐに、true両方のループを終了できます。)

ただし、グリッドをどのように描画しているかは示していません。グリッドが位置 (xp,yp) から始まり、すべてのセルに高さhと幅wがある場合、マウス座標を直接セル座標に簡単に変換できます。

cellx = (mousex - xp)/w
celly = (mousey - yp)/h

... cellx、celly < 0 または >= サイズは、グリッドの外側のクリックを示します。

于 2013-07-21T22:45:38.507 に答える