我目前正在编写一个java项目,我需要一个名为JPanel的板来包含一些本身就是JPanel的瓷砖,我将它们添加到一个适当大小的布局中,但是当我在JFrame中添加带有按钮的所有东西时,只有第一个Tile的大小是合适的,而其他的Tile的大小却很荒谬,比如1p宽和50p高,或者1*1p。
我不觉得我错过了什么,所有的东西都添加到JFrame中并添加到正确的布局中,有正确的行数和行数,在Tile类中大小设置为50*50 P。下面是一些包含图形设置的代码片段,特别是构造函数:
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]);
}
}
如果您愿意,我可以添加窗口类的一些片段,但是除了板之外,其他组件没有任何问题,它主要是添加和分组一些组件。下面是输出的屏幕截图,这样您就可以看到董事会的绘图行为
编辑:我在我的案例类中重写了getX和getY,再次重写了JPanel的一个,有点愚蠢的问题,谢谢你的回答
发布于 2016-12-09 15:49:53
setPreferredSize(d);
不要设置董事会的首选大小。板的布局管理器将根据添加到网格的组件数量和添加的最大组件的大小来确定首选的大小。
注意,(基于下面的行),您希望每个组件之间的间距为2像素,而您的计算不包括这些像素。所以让布局经理做好它的工作。
GridLayout layout = new GridLayout(Constante.length, Constante.length,2 ,2);
我们不知道Constante.length
是什么。将长度变量传递给类,因此使用该变量。
另外,为什么您的Case
类有这么多实例变量?这些变量从未在已发布的代码中使用。因此,也许您还有其他方法会导致布局问题。例如,不要覆盖getX()
或getY()
,这些方法由布局管理器使用。
https://stackoverflow.com/questions/41064032
复制相似问题