Как создать MigLayout для простой игры тральщика?
Я работаю над простой игрой в минный тральщик, в основном, чтобы немного выучить язык. "Основной движок игры" готов, и теперь я хотел бы добавить простой пользовательский интерфейс. Я посмотрел на качели, и до сих пор это работало довольно хорошо.
Единственное, с чем я борюсь - это миг-макет, который я бы хотел использовать. Моя идея состоит в том, чтобы иметь вид следующего макета:
_______________________
[_________NORTH_________]
[ ][ ][ ]
[ W ][ FIXED ][ E ]
[ E ][ SIZE ][ A ]
[ S ][ BOARD ][ S ]
[ T ][ ][ T ]
[___][_____________][___]
[_________SOUTH_________]
Север, запад, восток и юг должны расти в случае изменения размера окна. Основная панель должна иметь фиксированный размер со всеми кнопками, представляющими игровое поле.
Перед тем, как прочитать о макете mig, я подумал о том, чтобы использовать рамочную панель, содержащую панель сетки, но, как уже упоминалось на странице github seesaw:
Seesaw имеет элементарную поддержку GridBagLayout в функции seesaw.core/form-panel. Я не рекомендую использовать это, потому что он наполовину испечен и не такой мощный, как использование MigLayout (seesaw.mig) или JGoodies (seesaw.forms).
Я бы хотел попробовать MigLayout. Моя первая попытка:
(defn make-border-panel
[]
(mig-panel
:constraints ["fill" "[grow][][grow]" "[grow][][grow]"]
:items [
["X" "shrink 0" ]
["X" "shrink 0" ]
["X" "shrink 0" ]
["X" "shrink 0" ]
["X" "shrink 0" ]
["X" "shrink 0" ]
["X" "shrink 0" ]
["X" "shrink 0" ]
["X" "shrink 0" ]
["Minesweeper North" "dock north"]
["W" "dock west" ]
["E" "dock east" ]
["Minesweeper South" "dock south"]
]))
ОБНОВЛЕНИЕ 1
Я пока проигнорирую север, юг, запад, восток и сделал следующее, чтобы получить хотя бы центральную доску:
(defn make-button [x y]
(button :id (format "cell_%d_%d" x y)
:icon (clojure.java.io/resource "minesweeper/icons/button.png")))
(defn make-board
[w h]
(mig-panel
:constraints [(str "wrap" w) "[]" "[]" ]
:items (for [x (range w) y (range h)]
(vector (make-button x y) "w 24px!, h 24px!"))))
1 ответ
Я понял, что мне действительно не нужны панели WEST и EAST для моей игры тральщика. Мой окончательный макет выглядит так:
_____________
[____NORTH____]
[ ]
[ ]
[ CENTER ]
[ ]
[_____________]
[____SOUTH____]
Сам центр - другая панель миграции, которая содержит кнопки, представляющие мины. Код в clojure выглядит следующим образом:
(defn make-layout
[rows cols level]
(mig-panel
:constraints ["wrap1" "[center]" "[][]" ]
:items [[(make-info-panel)]
[(make-board-panel rows cols level)]]))
(defn make-board-panel
[rows cols level]
(let [bg (button-group)]
(mig-panel
:constraints [(str "gap 0, wrap" rows) "[]" "[]" ]
:items (for [row (range rows) col (range cols)]
(vector (make-button row col level bg) "w 24px!, h 24px!")))))