2

ここに画像の説明を入力

私は大学のプロジェクトに取り組んでいますが、コンポーネントをボード グリッドに並べるのに苦労しています。ボードは常に 1:1 の幅と高さの比率を維持しますが、サイズは異なる場合があります。これが私が試した結果です:

ここに画像の説明を入力

実際の画像サイズ 1200x1200 に対して計算したパーセンテージと一致しないのはなぜですか?

ここに私のレイアウトコードがあります:

public class BoardPanel extends ViewComponent {

    public static final int ROWS = 27;
    public static final int COLS = 23;
    private Board board = new Board();

    private BufferedImage background = ResourceLoader.openImage("images/board.jpg");

    public BoardPanel() {
        this.add(board, "pos 4.5% 4.5%, width 76.5%, height 91%");           
    }

    @Override
    public void paintContent(Graphics2D g) {
        g.drawImage(background, 0, 0, getHeight(), getHeight(), null);
    }

    private class Board extends ViewComponent {

        public Board() {
            setLayout(new GridLayout(ROWS, COLS,  1, 1));

            for (int row = 0; row < ROWS; row++)
                for (int col = 0; col < COLS; col++)
                    this.add(new Location(row, col));
        }
    }
}
4

2 に答える 2

2

これを行う方法を理解しました。答えは、との違いを見るとわかりGridLayoutますMigLayout

GridLayout何が起こったのかというと、すべてのセルが同じサイズになるため、使用時に空きスペース(挿入)がありました。1pxを追加したときにこれに気づきましたLineBorder

余分なスペースを処理する方法MigLayoutは、セル間で余分なピクセルを分散しているように見えるため、コンテナを可能な限り理想的に固定するように強制します。例えば:

this.setLayout(new MigLayout("ins 0, wrap " + COLS + ", gap 1", "grow", "grow"));


        for (int row = 0; row < ROWS; row++)
            for (int col = 0; col < COLS; col++)
                this.add(new Location(row, col), "grow");

ここに画像の説明を入力してください

ここに示されているグリッドレイアウトとまったく同じコンテナとパネルサイズを使用します:(挿入図に注意してください)

this.setLayout(new GridLayout(ROWS, COLS, 1, 1));
this.setBorder(new LineBorder(Color.RED));


    for (int row = 0; row < ROWS; row++)
        for (int col = 0; col < COLS; col++)
            this.add(new Location(row, col));

ここに画像の説明を入力してください

于 2012-08-27T18:50:58.153 に答える
2

別の方法として、ここに示すように、を使用BufferedImage#getSubimage()して画像を合同な部分に分割します。

于 2012-08-27T17:30:30.907 に答える