Java Swing:
我创建了一个返回 GridBagConstraints 的方法,这样我就不需要不断调用 new GridBagConstraints();并设置一堆变量。它的工作原理如下:
displayPanel.add(labelPanel, createGBC(0, 0, 2);
displayPanel.add(nosePanel, createGBC(1, 0, 3);
displayPanel.add(mainPanel, createGBC(2, 0, 3);
等等..
以及我的 createGBC 的代码:
private GridBagConstraints createGBC(int x, int y, int z) {
gbc = new GridBagConstraints();
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.anchor = (x == 0) ? GridBagConstraints.EAST : GridBagConstraints.WEST;
if (z == 0) gbc.insets = new Insets(0, 0, 0, 0);
else if (z == 1) gbc.insets = new Insets(8, 0, 0, 0);
else if (z == 2) gbc.insets = new Insets(4, 4, 0, 4);
else if (z == 3) gbc.insets = new Insets(0, 2, 0, 2);
else if (z == 4) gbc.insets = new Insets(0, 0, 16, 0);
else if (z == 5) gbc.insets = new Insets(6, 0, 16, 0);
return gbc;
}
我的问题是:有没有比简单地执行大量 else if 语句更好的方法来处理许多不同的插图?我当前的方法出现了几个问题。
我开始忘记哪些插入被分配给哪个 z 值。 (我正在尝试重构以使其更具可读性/可重用性)。
我实际上可能需要添加更多的插图预设,这会使问题 1 更加复杂。
最佳答案
当您将组件添加到 GridBagLayout
时,GridBagLayout
将复制约束,这意味着您不需要每次都创建新实例您想要做一些小改变,例如...
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.insets = new Insets(0, 0, 0, 0);
add(labelPanel, gbc);
gbc.gridx = 1;
gbc.insets = new Insets(0, 2, 0, 2);
add(nosePane, gbc);
gbc.gridx = 2;
add(mainPanel, gbc);
这意味着您只需更改需要的属性,并且可以继续重用之前设置的基本约束。
当您需要更改/重置的属性数量变得很大(或者您不记得或您需要更改的属性)时,您可以创建一个新的约束实例。
我倾向于以这种方式对组件“组”使用单个实例。
如果您想重复使用Insets
,那么也许您可以创建一系列常量并使用它们,这将使您的代码更易于阅读和维护
关于java - 如何处理 GridBagConstraints 的许多不同插图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33354579/