3

解決済み:

SSCCEを作成しようとした後、問題が何であるかがわかりました。

それは私の cell クラスに関係していました。JComponent クラスから getX() と getY() をオーバーライドしていることに気付きませんでした。

これらのアクセサーの名前を変更すると、すべて期待どおりに機能します

========================================

3 行 x 3 列に設定された GridLayout を持つ JPanel があります。

グリッドレイアウトの各セルに JPanels を追加して、9 つのセルすべてを埋めようとしています。これらの JPanel のそれぞれにはオーバーライドされた paintChildren メソッドがあり、JPanel の左上から始まるある種の長方形を描画します。最終結果は、各セルにセルの左上から始まる長方形があります。

すべての JPanel を gridlayout に追加すると、3x3 グリッドに配置されるのではなく、すべてが重なり合って左上隅に表示されます (重なり合っていることを確認しました)。

それらを 3x3 グリッドに配置するにはどうすればよいですか?

(簡体字) コード:

public class Panel extends JPanel {

public Panel(int x, int y) {
    layout = new GridLayout(x, y, 2, 2);
    setLayout(layout);

    populateGrid();
}

public void populateGrid() {

    removeAll();

    for (int i = 0; i < 9; i++)
        add(new Cell(50,50));
}
}

public class Cell extends JPanel {

public Cell(int x, int y) {
    // x/y values used to define rectangle
    setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
    setBackground(Color.WHITE);

}

public void paintChildren(Graphics g) {
    g.setColor(Color.BLUE);
    g.fillRect(0, 0, x, y);
}
}
4

1 に答える 1

0
  • 正しい をインポートしていることを確認してくださいPanel。(java.awt.Panelクラスではありません。)または、GridPanel混乱や衝突を避けるために、クラスの名前をまたは同様の名前に変更することをお勧めします。

  • おそらくオーバーライドしたくないでしょうpaintChildren。この場合、オーバーライドpaintComponentはより良いオプションのように思えます。

  • クラスの最小/優先/最大サイズを設定することができますCell

Panelクラスをインスタンス化して使用する実際のコードがなければ、これ以上観察するのは困難です。

于 2011-10-13T11:04:56.573 に答える