Рисование в JLayeredPane поверх существующих JPanels

Я работаю над разработкой шахматной игры. Я хочу, чтобы Контейнер доски использовал GridLayout для отображения сетки JPanel 8x8. (Это сделает функции такими, как так как выделение выбранных квадратов и правильных ходов намного проще.) Затем я хотел бы добавить части поверх этого слоя, чтобы их можно было перетаскивать. Изначально у меня были части, отображаемые путем рисования их в отдельных квадратных JPanels, но я решил, что это быть проблемой при попытке перетащить их позже. С тех пор я пытался использовать JLayeredPane в качестве основного контейнера, но столкнулся с несколькими проблемами.

Одна из них заключается в том, что после того, как я указал GridLayout для JLayeredPane независимо от того, какое целое число я использую, чтобы указать слой, на который нужно добавить JLabel или другой вид изображения, части добавляются в сетку, устанавливая их позиции и искажая всю доску. Я читал, что использование LayoutManager может мешать слой pos itioning на JLayeredPane, так что это не слишком удивительно. (Хотя демонстрационная программа Oracle из учебника JLayeredPane, кажется, справляется с этим отлично: http://download.oracle.com/javase/tutorial/uiswing/examples/components/LayeredPaneDemo2Project/src/components/LayeredPaneDemo2.java )

Тем не менее, я также попытался поместить сетку JPanels в отдельную JPanel, а затем добавить ее на нижний уровень JLayeredPane, идея заключалась в том, что я мог бы добавить значки перетаскивания для разделения, не -opaque JPanel на более высоком уровне JLayeredPane. Однако, когда я это сделаю, после того, как у меня будет JPanel сетки внутри JLayeredPane (т.е. до того, как будет добавлен слой перетаскивания), сетка не будет отображаться.

Я также попытался переопределить компонент paintComponent (и нарисовать) методы JLayeredPane для рисования изображений частей, но они скрыты JPanels (я вижу, что они действительно есть, установив JPanels на непрозрачные), и, насколько я могу судить, нет возможности установить слой графики на JLayeredPane. Я также пробовал использовать glassPane кадра, чтобы нарисовать части, но там тоже получилось нежелательное поведение.

Любая помощь в объяснении этого поведения или того, где я ошибаюсь, была бы очень признательна!

6
задан mKorbel 25 July 2011 в 07:01
поделиться