gpt4 book ai didi

java - GridLayout Jpanel 添加不考虑首选大小

转载 作者:行者123 更新时间:2023-12-02 03:10:58 25 4
gpt4 key购买 nike

我目前正在编写一个java项目,我需要一个名为board的JPanel来包含一些本身就是JPanel的Tiles,我将它们添加到适当大小的布局中,但是当我在JFrame中的grouplayout中添加带有按钮的所有内容时,只有第一个 Tile 的尺寸合适,其他 Tile 的尺寸很荒谬,例如 1p 宽度和 50p 高度或 1*1p。

我不觉得我错过了任何东西,所有内容都添加到 JFrame 中并添加到正确的布局,具有正确的行数和行数,并且在 Tile 类中将大小设置为 50*50p。以下是一些包含图形设置的代码片段,尤其是构造函数:

Tile.java:

class Case extends JPanel
{

private int _color;
private boolean _star;
private Case _casePere;
private ArrayList<Case> _fils;
private int _x,_y;

public Case(int x, int y)
{
_color = 0;
_star = false;
_casePere = null;
_fils = new ArrayList<Case>();
_x = x;
_y = y;
setPreferredSize(new Dimension(50,50));
setMinimumSize(new Dimension(50,50));
setBackground(Color.WHITE);
}

Board.java:

class Board extends JPanel{

private Case[][] _grid;
private Case[] _starsp1;
private Case[] _starsp2;

// constructeur
public Board(int nbStars, int length){



_grid = new Case[length][length];
_starsp1 = new Case[nbStars];
_starsp2 = new Case[nbStars];

//graphisme
Dimension d = new Dimension(50*length, length*50);

setBackground(Color.BLACK);
setPreferredSize(d);


GridLayout layout = new GridLayout(Constante.length, Constante.length,2 ,2);
setLayout(layout);

for(int y=0; y<length; ++y)
{
for(int x=0; x<length; ++x)
{

_grid[x][y] = new Case(x,y);
add(_grid[x][y]);
}
}

如果你愿意,我可以添加一些Window类的片段,但是除了Board之外,其他组件没有任何问题,主要是添加和分组一些组件。这是输出的屏幕截图,以便您可以看到董事会的绘图行为

编辑:我在 Case 类中覆盖了 getX 和 getY ,覆盖了 JPanel 的一个,又是一个愚蠢的问题,谢谢您的答案

/image/BAosv.png

最佳答案

setPreferredSize(d);

不要设置板的首选尺寸。电路板的布局管理器将根据添加到网格中的组件数量以及添加的最大组件的尺寸来确定首选尺寸。

请注意,(基于下面的行)您希望计算中不包括的每个组件之间的间距为 2 个像素。因此,让布局管理器完成它的工作。

GridLayout layout = new GridLayout(Constante.length, Constante.length,2 ,2);

我们不知道 Constante.length 是什么。您将长度变量传递给您的类,因此使用该变量。

另外,为什么你的 Case 类有这么多实例变量?这些变量从未在发布的代码中使用。因此,也许您还有其他导致布局问题的方法。例如,不要重写 getX()getY() 这些方法由布局管理器使用。

关于java - GridLayout Jpanel 添加不考虑首选大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41064032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com