Изменение позиций двух компонентов в GridLayout - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть панель с 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) для замены двух компонентов на панели макета сетки?

1 Ответ

1 голос
/ 07 апреля 2019

Удалите только эти две кнопки и заново добавьте их, используя метод add, который принимает индекс .

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);
}

Внимание. При добавлении порядок имеет значение.Всегда сначала добавляйте нижний индекс.

...