Как я переключаю панели в кадре в зависимости от действия кнопки?

Давайте сначала посмотрим на более простую проблему с 6 людьми. Следующая матрица показывает, кто (строки) говорит, с кем (столбцы), в каком раунде (запись):

Assignment Matrix

Так, например, в В первом раунде (желтый) у нас есть следующие пары:

(1-2), (3-5), (4-6)

blockquote>

Для раунда 2 (зеленый) у нас будет:

(1-3), (2-6), (4-5)

blockquote>

и т. д.

Таким образом, в основном мы ищем симметричный латинский квадрат (т.е. в каждой строке и в каждом столбце каждая запись появляется только один раз, ср. Латинские квадраты в Википедии ).

Латинский квадрат в квадрате может быть легко сгенерирован с помощью таблицы сложений:

inner_ls <- function(k) {
  res <- outer(0:(k-1), 0:(k-1), function(i, j) (i + j) %% k)
  ## replace zeros by k
  res[res == 0] <- k
  ## replace diagonal by NA
  diag(res) <- NA
  res
}

inner_ls(5)
#      [,1] [,2] [,3] [,4] [,5]
# [1,]   NA    1    2    3    4
# [2,]    1   NA    3    4    5
# [3,]    2    3   NA    5    1
# [4,]    3    4    5   NA    2
# [5,]    4    5    1    2   NA

Таким образом, осталось добавить последнюю строку (столбец) с отсутствующим круглым числом:

[111 ]

С этим вы получите свою матрицу назначения следующим образом:

full_ls(18)

#     1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18
# 1  NA  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17
# 2   1 NA  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17  2
# 3   2  3 NA  5  6  7  8  9 10 11 12 13 14 15 16 17  1  4
# 4   3  4  5 NA  7  8  9 10 11 12 13 14 15 16 17  1  2  6
# 5   4  5  6  7 NA  9 10 11 12 13 14 15 16 17  1  2  3  8
# 6   5  6  7  8  9 NA 11 12 13 14 15 16 17  1  2  3  4 10
# 7   6  7  8  9 10 11 NA 13 14 15 16 17  1  2  3  4  5 12
# 8   7  8  9 10 11 12 13 NA 15 16 17  1  2  3  4  5  6 14
# 9   8  9 10 11 12 13 14 15 NA 17  1  2  3  4  5  6  7 16
# 10  9 10 11 12 13 14 15 16 17 NA  2  3  4  5  6  7  8  1
# 11 10 11 12 13 14 15 16 17  1  2 NA  4  5  6  7  8  9  3
# 12 11 12 13 14 15 16 17  1  2  3  4 NA  6  7  8  9 10  5
# 13 12 13 14 15 16 17  1  2  3  4  5  6 NA  8  9 10 11  7
# 14 13 14 15 16 17  1  2  3  4  5  6  7  8 NA 10 11 12  9
# 15 14 15 16 17  1  2  3  4  5  6  7  8  9 10 NA 12 13 11
# 16 15 16 17  1  2  3  4  5  6  7  8  9 10 11 12 NA 14 13
# 17 16 17  1  2  3  4  5  6  7  8  9 10 11 12 13 14 NA 15
# 18 17  2  4  6  8 10 12 14 16  1  3  5  7  9 11 13 15 NA

5
задан Michael Myers 8 May 2009 в 17:35
поделиться

2 ответа

Если я правильно понимаю, вы хотите иметь несколько JPanels , только один из которых отображается одновременно? Если это так, похоже, что CardLayout - это то, что вам нужно. Вы в основном добавляете к нему все свои JPanel с уникальными именами, а затем можете указать CardLayout , какие из них показывают .

12
ответ дан 18 December 2019 в 12:01
поделиться

Я думаю, что CardLayout, вероятно, то, что вам нужно, но если что-то вроде использования памяти вызывает беспокойство и вы действительно хотите удалить и добавить новый JPanel / Component, вам необходимо удалить старый JPanel и добавить новый (с соответствующими ограничениями и / или индексом в зависимости от макета). После переключения вам потребуется validate () на панели содержимого.

3
ответ дан 18 December 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: