首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GridLayout面板添加不考虑优先尺寸

GridLayout面板添加不考虑优先尺寸
EN

Stack Overflow用户
提问于 2016-12-09 15:43:53
回答 1查看 38关注 0票数 0

我目前正在编写一个java项目,我需要一个名为JPanel的板来包含一些本身就是JPanel的瓷砖,我将它们添加到一个适当大小的布局中,但是当我在JFrame中添加带有按钮的所有东西时,只有第一个Tile的大小是合适的,而其他的Tile的大小却很荒谬,比如1p宽和50p高,或者1*1p。

我不觉得我错过了什么,所有的东西都添加到JFrame中并添加到正确的布局中,有正确的行数和行数,在Tile类中大小设置为50*50 P。下面是一些包含图形设置的代码片段,特别是构造函数:

Tile.java:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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]);
        }
    }

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

编辑:我在我的案例类中重写了getX和getY,再次重写了JPanel的一个,有点愚蠢的问题,谢谢你的回答

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-09 15:49:53

代码语言:javascript
运行
复制
setPreferredSize(d);

不要设置董事会的首选大小。板的布局管理器将根据添加到网格的组件数量和添加的最大组件的大小来确定首选的大小。

注意,(基于下面的行),您希望每个组件之间的间距为2像素,而您的计算不包括这些像素。所以让布局经理做好它的工作。

代码语言:javascript
运行
复制
GridLayout layout = new GridLayout(Constante.length, Constante.length,2 ,2);

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41064032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档