1

私の問題は、コンストラクターでJButtonを作成するときに、次のコードを使用して、その位置をいくつかの相対座標、たとえばx=5およびy=6に設定することです。

this.setLocation(new Point(x, y));

しかし、getLocation()メソッドを使用してその場所を取得しようとすると、常に0,0が返されます。これは、グリッドレイアウトを利用したJFrameに配置しようとしているすべてのJButtonで発生することに注意してください。また、デバッグプロセス中に、それらの場所が適切にインスタンス化されていることにも注意しました。

誰かが私にこれが起こる理由を説明できますか、そして私がそれをどうにかして修正できるかどうか?

編集:

コンストラクター(私が作成したブリッククラスはJButtonを拡張します):

public Brick(int posx, int posy) {
        this.setLocation(new Point(posx, posy));
        this.setVisible(true);
    }

2つのforループで約100以上を作成します。

   for (int row = 0; row < 15; row++) {
    for (int column = 0; column < 15; column++) {
    Brick brickie = new Brick(row, column);
    }
   }

しかし、その後、レンガを選び、その場所を次のように確認したい場合は、次のようにします。

Point brickLocation = brickie.getLocation();

brickLocation.x == 0と_brickLocation.y == 0

4

2 に答える 2

2

JComponent(s)座標、getBounds、またはgetLocationのみを返すことができます

  • コンテナがすでに画面に表示されている場合

  • pack()

于 2012-06-05T06:48:44.980 に答える
2

レイアウトマネージャー(GridLayout)によってボタンが自動的に割り当てられるときに、ボタンの位置を変更しようとしています。そのため、常に同じ値が返されます。レイアウトはそれを上書きするだけです。

コンポーネントの境界/場所(ボタンを含む)を手動で変更できるようにするには、コンテナのレイアウトとして「null」を設定する必要があります。その後、必要に応じて場所/サイズ/境界を変更するだけで、コンポーネントの位置に影響します。

また、「setVisible(true)」を使用する必要はありません。デフォルトでは、そのフラグはすべてのコンポーネント(まだ表示されていないコンポーネントも含む)に対してtrueです。

于 2012-06-05T06:48:48.780 に答える