java - 如何处理 GridBagConstraints 的许多不同插图?

标签 java swing layout-manager gridbaglayout insets

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 语句更好的方法来处理许多不同的插图?我当前的方法出现了几个问题。

  1. 我开始忘记哪些插入被分配给哪个 z 值。 (我正在尝试重构以使其更具可读性/可重用性)。

  2. 我实际上可能需要添加更多的插图预设,这会使问题 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/

相关文章:

java - 包不存在 - android/java

java - JTable - 列中每个单元格的不同组合框

java - 如何引用 JScrollPane 中滚动的距离?

java - 在我的屏幕上放置重新启动按钮

java - 如何在具有空布局的 JPanel 中添加 JTable?

java - 如何指定按钮的位置?

java - 在java Activity 中循环遍历Android表格布局

java - GLSL 着色器无法在 Android 上编译

java - 单击按钮加载 JList

java - 无法调整 BoxLayout 中 JLabels 的大小