3

这就是我想要实现的目标:

   |--0--|--1--|--2--|--3--|--4--|--5--|--6--|--7--|--8--|--9--|
0  |     |JLabe|l----|-----|-----|-----|-----|-----|-----|-----|
1  |     |     |JLabe|l----|-----|-----|-----|-----|-----|-----|
2  |     |     |     |JLabe|l----|-----|-----|-----|-----|-----|
3  |     |     |     |JLabe|l----|-----|-----|-----|-----|-----|

这就是我到目前为止所得到的,这是我所能达到的最接近我所追求的。

        center.setLayout(centerLayout);
    JPanel[] card = new JPanel[1]; //update as it gets longer, eventually Scoreboard.LENGTH
    card[0] = new JPanel();
    GridBagLayout cardLayout = new GridBagLayout();
    card[0].setLayout(cardLayout);
    cardLayout.setConstraints(winner, new GridBagConstraints(0, 0, 10, 1, 1, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, new Insets(0,0,0,0), 0, 0));
    card[0].add(winner);
    cardLayout.setConstraints(name, new GridBagConstraints(1, 1, 9, 1, 0.8, 0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(0,0,0,0), 0, 0));
    card[0].add(name);
    cardLayout.setConstraints(with, new GridBagConstraints(2, 2, 8, 1, 0.7, 0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(0,0,0,0), 0, 0));
    card[0].add(with);
    cardLayout.setConstraints(score, new GridBagConstraints(2, 3, 8, 1, 0.7, 0, GridBagConstraints.LAST_LINE_START, GridBagConstraints.NONE, new Insets(0,0,0,0), 0, 0));
    card[0].add(score);
    center.add(card[0], "card1");
    this.getContentPane().add(center);

由于某种原因,它显示如下:

   |--0--|--1--|--2--|--3--|--4--|--5--|--6--|--7--|--8--|--9--|
0  |JLabe|l----|-----|-----|-----|-----|-----|-----|-----|-----|
1  |JLabe|l----|-----|-----|-----|-----|-----|-----|-----|-----|
2  |JLabe|l----|-----|-----|-----|-----|-----|-----|-----|-----|
3  |JLabe|l----|-----|-----|-----|-----|-----|-----|-----|-----|

也许有一种比使用 GridBagLayout 更合适的方式来布置我的文本。(它确实需要在不同的分辨率下工作,因此使用的任何布局管理器都需要灵活)

4

1 回答 1

1

1)命名一个GridBagLayout变量“cardLayout”不是最好的主意,IMO。

2)由于您只提供了代码片段而没有提供SSCCE,因此我只能根据您提供的“图片”进行猜测。GridBagLayout 需要在每一行/列中都有一个组件来定义它的大小。给定的列将与在该列中找到的具有最宽首选尺寸的组件一样宽。身高也是一样。因此,根据您的结果图片,第 0 列中没有具有首选宽度的组件。一种解决方法是将 aBox.createHorizontalStrut(someWidth)放在所需的列中。

于 2013-06-22T13:50:21.637 回答