GridBagLayout行为不端。横向分布问题

时间:2013-06-22 05:38:42

标签: java swing gridbaglayout cardlayout

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

   |--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更合适的方式来布局我的文本。 (它确实需要处理不同的分辨率,因此布局管理器使用的需要灵活)

1 个答案:

答案 0 :(得分:1)

1)命名GridBagLayout变量" cardLayout"不是最好的主意,IMO。

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