Я работаю над разработкой игры в шахматы. Я хочу, чтобы Контейнер платы использовал GridLayout для отображения сетки JPanels 8x8. (Это значительно упростит такие функции, как выделение выделенных квадратов и правильные ходы.) Затем я хотел бы добавить фигуры поверх этого слоя, чтобы их можно было перетаскивать. Сначала я показывал фрагменты, рисуя их в отдельных квадратных JPanels, но подумал, что это будет проблемой при попытке перетаскивания их позже. С тех пор я пытался использовать JLayeredPane в качестве основного контейнера, но столкнулся с несколькими проблемами.
Во-первых, после того, как я определил GridLayout для JLayeredPane, независимо от того, какое целое число я использую, чтобы указать слой для добавления JLabel или другого вида изображения, части добавляются в сетку, устанавливая их позиции. и искажая всю доску. Я читал, что использование LayoutManager может помешать позиционированию слоя на JLayeredPane, так что это не слишком удивительно. (Хотя демонстрационная программа Oracle из учебника JLayeredPane, кажется, делает это просто отлично: http://download.oracle.com/javase/tutorial/uiswing/examples/components/LayeredPaneDemo2Project/src/components/LayeredPaneDemo2.java)
Однако я также попытался поместить сетку JPanels в свою собственную JPanel, а затем добавить ее в нижний слой JLayeredPane. Идея заключалась в том, что я мог бы добавлять значки перетаскивания в отдельные непрозрачные JPanel. на более высоком уровне JLayeredPane. Однако, когда я делаю это, после того, как у меня просто будет сетка JPanel внутри JLayeredPane (т.е. до добавления слоя перетаскивания), сетка не будет отображаться.
Я также пытался переопределить методы paintComponent (и paint) в JLayeredPane для рисования кусочных изображений, но они скрыты JPanels (я вижу, что они действительно есть, установив JPanels в непрозрачный) и насколько я могу судить, нет никакой возможности установить слой графики на JLayeredPane. Я также пытался использовать стеклянную панель рамки для рисования кусочков, но там также получалось нежелательное поведение.
Буду очень признателен за любую помощь в объяснении этого поведения или в случае, если я ошибаюсь!