java - 更改 GridLayout 中两个组件的位置

标签 java swing jpanel layout-manager grid-layout

我有一个带有 GridLayout 的面板以及其中的一些组件。下面是代码示例。

JPanel panel = new JPanel();
panel.setLayout(new GridLayout(5,1));

JButton[] buttons = new JButton[5];
for (int i = 0; i < buttons.length; i++)
{
   buttons[i] = new JButton(i + "");
   panel.add(buttons[i]);
}

我想要的是能够交换示例中这些按钮的位置,我尝试为其编写一个方法。但我设法做到这一点的唯一方法是将它们全部删除,然后按正确的顺序添加。那么有没有更好的方法编写方法 swap(int index1, int index2) 来交换网格布局面板中的两个组件?

最佳答案

仅删除这两个按钮,然后使用 add method which takes an index 重新添加它们。 .

static void swap(Container panel,
                 int firstIndex,
                 int secondIndex) {

    if (firstIndex == secondIndex) {
        return;
    }

    if (firstIndex > secondIndex) {
        int temp = firstIndex;
        firstIndex = secondIndex;
        secondIndex = temp;
    }

    Component first = panel.getComponent(firstIndex);
    Component second = panel.getComponent(secondIndex);

    panel.remove(first);
    panel.remove(second);

    panel.add(second, firstIndex);
    panel.add(first, secondIndex);
}

注意:添加时顺序很重要。始终首先添加较低的索引。

关于java - 更改 GridLayout 中两个组件的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553779/

相关文章:

java | JFrame -> JCombobox : Getting Object(value) by using getSelectedItem?

Java GridBagLayout 无法正确设置我的 GUI

java - 在 JPanel 中显示多个 JTextField 和 JLabels 时遇到困难

swing - JPanel的MouseListener缺少mouseClicked事件

java - 减少有许多 hibernate 线程时使用的操作系统线程数

触发获取请求时出现 java.lang.IllegalArgumentException : Host name may not be null,

java - Hibernate - 在条件限制中添加另一个类的属性

java.lang.SecurityException : Need BLUETOOTH permission: Neither user 10065 nor current process has android. 权限.BLUETOOTH

java - 从 JLIST 中删除项目

java - 使用 JFrame 和 JFileChooser 选择文件