我需要重新排列我的GridLayout
中的项目,因此当动态创建JButton
时,页脚(即JLabel
)停留在网格的底部,并且动态创建的按钮位于页脚的正上方。我该如何动态地重新排列使用java的gridlayout中的项目?
这可能吗?如果有,我可以看一个例子吗?
我目前电网是
new GridLayout(intIndex, 1);
其中intIndex
递增每次创建动态元素的时间。
我需要重新排列我的GridLayout
中的项目,因此当动态创建JButton
时,页脚(即JLabel
)停留在网格的底部,并且动态创建的按钮位于页脚的正上方。我该如何动态地重新排列使用java的gridlayout中的项目?
这可能吗?如果有,我可以看一个例子吗?
我目前电网是
new GridLayout(intIndex, 1);
其中intIndex
递增每次创建动态元素的时间。
由于它是页脚,因此您可能需要使用BorderLayout
并使页脚底部保持为BorderLayout.PAGE_END
。然后将您的组件与GridLayout
放在中心,与BorderLayout.CENTER
。这样,您的页脚将始终保持在底部,并且不会干扰内容,您现在可以自由更改以使用任何布局管理器而不影响页脚。
这应该是一个很好的解决方案,如果您的页脚横跨整个底部,但如果您尝试在底部角落制作某种小页脚,那么它会更困难一点,但无论哪种方式我建议尽量保持页脚与内容分开。
我认为还有更多我可以添加,尽管一个答案被接受。
布局有两个界面:LayoutManager
和LayoutManager2
。第二个扩展了第一个。所以,所有布局类都从LayoutManager
继承。
现在,LayoutManager2
可让您根据某些约束来安排组件。例如,在Shakedown的回答中,BorderLayout.CENTER
是BorderLayout
的约束条件。
但是,那些只实现了LayoutManager
的布局不接受特定组件的约束。 GridLayout
就是这样的布局。它将从左上角开始添加组件,并继续向右,并在一行满时转到下一行。您可能会感兴趣GridBagLayout
。
感谢您的反馈,我甚至没有想到这一点!我遇到的唯一问题是尝试“重新打包”(在将项目添加到布局后使用pack())。它将重新包装,而不是新的尺寸。有任何想法吗? –
除非您直接将组件添加到'JFrame'或某个重量级容器,否则不需要调用'pack()'。什么组件不适合你?你能否提供更多的细节? –
当我在BorderLayout.CENTER位置的网格布局中添加一个新的面板时,JFrame类型的“重叠”了前一个面板,而我想包只会将jframe调整为适当的大小。 –