2011-09-14 42 views
2

我需要重新排列我的GridLayout中的项目,因此当动态创建JButton时,页脚(即JLabel)停留在网格的底部,并且动态创建的按钮位于页脚的正上方。我该如何动态地重新排列使用java的gridlayout中的项目?

这可能吗?如果有,我可以看一个例子吗?

我目前电网是

new GridLayout(intIndex, 1); 

其中intIndex递增每次创建动态元素的时间。

回答

4

由于它是页脚,因此您可能需要使用BorderLayout并使页脚底部保持为BorderLayout.PAGE_END。然后将您的组件与GridLayout放在中心,与BorderLayout.CENTER。这样,您的页脚将始终保持在底部,并且不会干扰内容,您现在可以自由更改以使用任何布局管理器而不影响页脚。

这应该是一个很好的解决方案,如果您的页脚横跨整个底部,但如果您尝试在底部角落制作某种小页脚,那么它会更困难一点,但无论哪种方式我建议尽量保持页脚与内容分开。

+0

感谢您的反馈,我甚至没有想到这一点!我遇到的唯一问题是尝试“重新打包”(在将项目添加到布局后使用pack())。它将重新包装,而不是新的尺寸。有任何想法吗? –

+0

除非您直接将组件添加到'JFrame'或某个重量级容器,否则不需要调用'pack()'。什么组件不适合你?你能否提供更多的细节? –

+0

当我在BorderLayout.CENTER位置的网格布局中添加一个新的面板时,JFrame类型的“重叠”了前一个面板,而我想包只会将jframe调整为适当的大小。 –

1

我认为还有更多我可以添加,尽管一个答案被接受。

布局有两个界面:LayoutManagerLayoutManager2。第二个扩展了第一个。所以,所有布局类都从LayoutManager继承。

现在,LayoutManager2可让您根据某些约束来安排组件。例如,在Shakedown的回答中,BorderLayout.CENTERBorderLayout的约束条件。

但是,那些只实现了LayoutManager的布局不接受特定组件的约束。 GridLayout就是这样的布局。它将从左上角开始添加组件,并继续向右,并在一行满时转到下一行。您可能会感兴趣GridBagLayout

相关问题