Java 使用GridBagLayout使JPanel看起来相同
我有多个JPanel,所有这些都基于三列宽的假设。和一列或多列高。目前我正在为他们使用GridBagLayout 我计划在另一个JPanel中将它们添加到彼此下面。现在的问题是,这些列没有对齐 在保持单个JPanel彼此独立的同时,我能做些什么吗?而不会退回到更固定的布局。 我可以给JPanel提供父容器,并向其中添加元素,同时保持JPanel本身为空(当不处于“独立模式”时)。但我认为这种做法令人厌恶 谢谢你的帮助 编辑: 我的布局类如下所示:Java 使用GridBagLayout使JPanel看起来相同,java,swing,gridbaglayout,Java,Swing,Gridbaglayout,我有多个JPanel,所有这些都基于三列宽的假设。和一列或多列高。目前我正在为他们使用GridBagLayout 我计划在另一个JPanel中将它们添加到彼此下面。现在的问题是,这些列没有对齐 在保持单个JPanel彼此独立的同时,我能做些什么吗?而不会退回到更固定的布局。 我可以给JPanel提供父容器,并向其中添加元素,同时保持JPanel本身为空(当不处于“独立模式”时)。但我认为这种做法令人厌恶 谢谢你的帮助 编辑: 我的布局类如下所示: public class Layout exte
public class Layout extends GridBagLayout {
public void collocate_line(List<? extends JComponent> compos, final Container container) {
int currentCol = 0;
for (final JComponent compo: compos) {
final GridBagConstraints gbc = new GridBagConstraints(
currentCol, this.currentLine, GRID_WIDTH, GRID_HEIGHT,
DEFAULT_WEIGHT_X, DEFAULT_WEIGHT_Y, GridBagConstraints.CENTER,
GridBagConstraints.BOTH, DEFAULT_INSETS, 0, 0);
container.add(compo, gbc);
currentCol++;
}
currentLine++;
}
}
public class ScopePanel extends JPanel implements ActionListener {
private final ChooseClassPath classPath;
private final ChooseStubsJava stubsJava;
public ScopePanel(final IPreparedCommands exec, final ResourceBundle messages) {
super();
final Layout gbl = new Layout();
this.setLayout(gbl);
this.classPath = new ChooseClassPath(exec, messages, gbl);
this.add(this.classPath, GUIUtil.mkgbc_fillx(0, 0, GridBagConstraints.REMAINDER, 1));
this.stubsJava = new ChooseStubsJava(exec, messages, gbl);
this.add(this.stubsJava, GUIUtil.mkgbc_fillx(0, 2, GridBagConstraints.REMAINDER, 1));
}
}
元素如下所示:
public class ChooseClassPath extends JPanel {
public ChooseClassPath(final IPreparedCommands exec, final ResourceBundle messages) {
this(exec, messages, new Layout());
}
public ChooseClassPath(final IPreparedCommands exec, final ResourceBundle messages, final Layout layout) {
super();
{ // Line 1
final List<JComponent> line = new ArrayList<JComponent>();
final JLabel label = new JLabel(messages.getString("label_classpath"));
line.add(label);
//...
layout.collocate_line(line, this);
}
}
}
public类ChooseClassPath扩展了JPanel{
public ChooseClassPath(最终IPreparedCommands exec,最终ResourceBundle消息){
这(exec,messages,newlayout());
}
public ChooseClassPath(最终IPreparedCommands exec、最终ResourceBundle消息、最终布局){
超级();
{//第1行
最终列表行=新的ArrayList();
final JLabel=newjlabel(messages.getString(“label_classpath”);
行。添加(标签);
//...
布局。并置_线(线,此);
}
}
}
结果是:
确保通过与所有JPanel相同的GirdBagConstraints属性集。
esp属性,如gridwidth、fill、weightx等。此外,JPanel中的内容(如果每个JPanel实例的内容不同)可能会影响网格的单个大小。请考虑使用GrdDead,仅当GridLayout或其他更简单的布局无法满足您的需求时,进入GRIDBAG布局。您可以发布您的代码吗?您可以做一些事情,但有点混乱。您可以将所有组件放在同一个容器中,或者尝试miglayout,我知道它可以做到这一点(我自己没有使用过)