Я создаю графический интерфейс Java Swing и отформатировал JPanel для использования GridLayout. Мне нужно получить доступ к определенному "ящику" (т.е. определенной координате) сетки, но я не вижу способа сделать это.
Как я могу это сделать?
Я создаю графический интерфейс Java Swing и отформатировал JPanel для использования GridLayout. Мне нужно получить доступ к определенному "ящику" (т.е. определенной координате) сетки, но я не вижу способа сделать это.
Как я могу это сделать?
Вы не должны полагаться на код GUI (представление) для получения информации о данных программы (модели). Лучшим решением было бы «знать», где какой компонент находится с самого начала — возможно, у вас должна быть структура данных (2D-массив?), которая содержит компоненты и обновляется всякий раз, когда что-то добавляется в сетку.
Однако, если вам нужно быстрое и очень грязное решение, вы можете начать играть в игры с JPanel.getComponentAt()
. Однако для этого требуются пиксельные координаты, поэтому вам потребуется провести обратный инжиниринг, чтобы выяснить, сколько места занимает данный квадрат сетки. Пространство между квадратами сетки задается вашим GridLayout
объектом. Однако это не рекомендуется. Я просто включаю его в интересах полноты (и поскольку это более буквальный ответ на ваш вопрос).
Mark
, в котором хранится X
или O
. Чтобы представить данное игровое состояние, вы могли бы иметь такой 2D-массив: соответствующий символ. Итак, у вас есть модель — набор Mark
s — и представление — JLabel
s.
- person tsm; 10.12.2011
В GridLayout
"Контейнер разделен на прямоугольники одинакового размера». Вы можете добавить пустой прозрачный компонент в места, где вы хотите, чтобы они казались пустыми, например. new JLabel("")
. См. также GridBagLayout
и Использование менеджеров макетов.