我正在使用Java Swing,我遇到以下问题:
我有一个扩展JPanel的类TnaiPanel。在这个课程中,我创建了3个组件,然后使用BoxLayout将它们放在水平线上。
另外,我有一个类TnaimDinamimPanel,它也扩展了JPanel。此类包含多个TnaiPanel的出现,使用BoxLayout垂直布局。
另外,我有一个扩展JFrame的类MainFrame。此框架包含一个菜单栏和一个主面板。主面板可以更改(当选择某个菜单项时,我创建一个新面板并将其设置为显示为框架的主面板。)
现在,由于某些原因,当我将新创建的TnaimDinamimPanel添加到框架的组件时,我得到“BoxLayout无法共享”。
我不介意使用不同的布局对象。 我想得到的结果是一种组件的“表”,其中每个TnaiPanel将具有固定的组件大小和间距,基本上在“表”中扮演“行”的角色。
谢谢, 马勒基。
答案 0 :(得分:3)
您可能只创建一个BoxLayout实例。每次需要时创建一个新的(即每个TnaiPanel一个,每个TnaimDinamimPanel一个,每个MainFrame可能一个)。
答案 1 :(得分:2)
要回答你问题的第二部分,即“有一个组件表”,我会说你不能用不同的面板做,除非你开始设置组件的个别min,pref和max尺寸和面板,这是非常不受欢迎的。
如果需要在组件表中进行正确对齐,则需要将所有组件放在一个面板中,这也意味着您只需要使用一个布局。但是,唯一可以让您执行所需操作的默认swing布局是GridBagLayout
。实际上GroupLayout
(java 6)也符合要求,但它绝对需要图形设计师(例如netbeans中的那个)。
如果像我一样,你对建设者过敏,那么你最好使用一个旨在以编程方式使用的第三方LayoutManager
(我不会认为GridBagLayout
在此虽然我过去曾经这样使用过它。
MigLayout
(如Skeptic所建议)是一种选择。另一个选项是DesignGridLayout,它可能更适合您的目的,并且比MigLayout
更容易使用。
答案 2 :(得分:1)
请尝试MiGLayout。