JPanel отключается, FlowLayout работает не так, как задумано
-
03-07-2019 - |
Вопрос
На днях этот код работал. Я изменил некоторые вещи и перезапустил его, и теперь он не работает, как задумано. Очевидно, что то, что я изменил, изменило поведение, но я вернулся и отменил все эти изменения, и это все еще не работает. Не обращая внимания на этот бит информации (для начала), почему этот код не размещает сетку JLabels 15x15 внутри JPanel?
gameBoard.setLayout(new FlowLayout());
for (int i = 0; i < 15; i++)
{
for (int j = 0; j < 15; j++)
{
JLabel tile = new JLabel("");
tile.setHorizontalAlignment(SwingConstants.CENTER);
tile.setPreferredSize(new Dimension(27, 27));
tile.setBorder(new EtchedBorder());
tile.setEnabled(false);
gameBoard.add(tile);
}
}
gameBoard - это JPanel, определенный с помощью GUI Builder NetBeans. Он имеет предпочтительный размер, максимальный размер (такой же, как предпочтительный). Параметры горизонтального / вертикального изменения размера отключены, однако, когда этот код запускается, каждая кнопка расширяется по горизонтали, не прерываясь.
Если я правильно понимаю, FlowLayout должен обернуть элементы, когда они достигнут конца содержащего их элемента. Это происходило до сегодняшнего дня, я действительно не знаю, почему это поведение прекратилось?
Решение 4
Я понял это. Видимо, мне пришлось установить предпочитаемый размер в самом коде. Просто установить его в окне свойств Netbeans недостаточно. Странно.
Другие советы
В интересах научить человека ловить рыбу:
Ревизионные системы управления великолепны. Даже ваша система регулярно выполняет резервное копирование вашего источника.
Полезный метод отладки - убирать вещи, пока они не сработают. Делает ли установка границы ваш код ломаться. Идя другим путем, вы можете написать тривиальную программу, которая демонстрирует проблему.
Я нашел большой успех и контроль с помощью TableLayout и я бы порекомендовал это всем. Вы можете определить столбцы и строки, используя определенное количество пикселей, или вы можете просто использовать TableLayout.PREFERRED
для каждого столбца и / или строки. Очень красивый и гибкий макет. Мы используем его везде.