Java中属性页面的布局
问题描述:
是否有一种简单的方法在面板中以类似于属性页面的方式布局组件?每个属性或设置的标签位于左侧,编辑器组件位于面板右侧。理想情况下,标签应该左对齐,编辑右对齐。编辑离开的位置应该从最大的标签宽度加上一个间隙开始。所有编辑者应该有相同的宽度。Java中属性页面的布局
目前,我只能使用Netbeans设计器使用与生成的代码中的组布局相对应的“Free design”来执行此操作。即使那时我正在使用设计器来设置位置和大小。为了公平起见,生成的代码非常糟糕。
生成的代码
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 198, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(199, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(11, 11, 11)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(275, 275, 275))
);
现在记住,我想这样做的代码 - 而不是在Netbeans的设计师,我也想加入许多组件。
我不认为具有2列和x行的网格布局会将其切割为总是在面板中间分成2列。因此,如果所有标签都不太大,它与编辑之间就会出现巨大的差距。
任何提示,技巧,黑客都欢迎。我正在考虑编写我自己的布局管理器来做到这一点。
尽管在Netbeans设计器中编写并使用它会很好。但那是一点点跳枪。
答
您希望为组件外观设置的要求越高,为了达到目标,您需要编写的代码越复杂。
如果GridLayout不符合您的喜好,那么GridBagLayout会。但是,我担心,当你实现一个GridBagLayout时,你的代码看起来不会比你在这里作为例子好得多。
我会坚持现有的布局,并忽略由Netbeans设计师生成的“丑陋”代码。无论如何,您不必乱用它,因为您可以用图形方式进行所有编辑。