0

GridBagLayout と GridBagConstraints を使用してマップ (テクスチャのグリッド) を作成しています

ここに画像の説明を入力

しかし今、異なるテクスチャの間にエッジを挿入したい: 私はこのようなものが欲しい

|-----|-----|-----|
|-----|-----|-----|
|----|-|----|-----|
|-----|-----|-----|

私が試してみました:

c.gridx = i*5;
c.gridy = j*5;
c.gridwidth = 5;
c.gridheight = 5;

if(right != null && right != currentTexture)
    c.gridwidth--;
if(left != null && left != currentTexture){
    c.gridx = i*5+1;
    c.gridwidth--;
}

しかし、私はこれを取得しています:

ここに画像の説明を入力

同じテクスチャを使用していますが、エッジの 1 つの位置を切り取ってほしい

@ Code-Guru ご関心をお寄せいただきありがとうございます。問題を解決する別の方法を見つけました。つまり、BufferedImage で画像を切り取ります。変更をコードに投稿します。

ImageIcon tile = //get texture ...
Image img = tile.getImage();
BufferedImage buff = new BufferedImage(tile.getIconWidth(),tile.getIconHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = buff.createGraphics();
g.drawImage(img,0,0,null);

int w = tile.getIconWidth(), h = tile.getIconHeight();
int x = 0, y = 0;
c = new GridBagConstraints();
c.gridx = i*10;
c.gridy = j*10;
c.gridwidth = 10;
c.gridheight = 10;
c.fill = GridBagConstraints.NONE;

if(right != null && right != texture){
    //c.gridwidth--;
    c.anchor = GridBagConstraints.WEST;
    w -= (int)(res.ordinal()*2.5+2.5);
}
if(left != null && left != texture){
    //c.gridx = (i*10)+1;
    //c.gridwidth--;
    x = (int)(res.ordinal()*2.5+2.5);
    w -= (int)(res.ordinal()*2.5+2.5);
    if(c.anchor == GridBagConstraints.WEST)
        c.anchor = GridBagConstraints.CENTER;
    else
        c.anchor = GridBagConstraints.EAST;
}
BufferedImage buff2 = buff.getSubimage(x, y, w, h);
JLabel l = new JLabel(new ImageIcon(buff2));
globalMap.add(l, c);
4

1 に答える 1

0

行ごとに 5 列のグリッドから始める必要があると思います。次に、各行について、各セルがまたがる列数を指定する必要があります。

この例の 1 行目、2 行目、4 行目では、最初のセルは 2 列にまたがり、2 番目のセルは 2 列にまたがり、最後のセルは 1 列だけにまたがります。3 行目では、1 番目、3 番目、4 番目のセルが 1 列にまたがり、2 番目のセルが 2 列にまたがっています。

gridwidthps オブジェクトのメンバーを使用して、ここで「スパニング」と呼ぶものを実装しGridBagConstraintsます。これは、コンストラクターを使用して、または直接設定できます。

于 2013-02-17T01:21:15.610 に答える