【发布时间】:2011-10-12 06:42:48
【问题描述】:
我正在开发一款国际象棋游戏。我想让板容器利用 GridLayout 来显示 8x8 的 JPanel 网格。 (这将使突出选定的方块和有效移动等功能更加容易。)然后我想在这一层上添加碎片,以便可以拖放它们。我最初通过在单个方形 JPanel 中绘制它们来显示这些碎片,但我认为稍后尝试拖放它们时会出现问题。从那以后,我一直在尝试使用 JLayeredPane 作为主容器,但遇到了几个问题。
一旦我为 JLayeredPane 指定了 GridLayout,无论我使用哪个 Integer 来指定要添加 JLabel 或其他类型图像的图层,这些片段都会被添加到网格中,从而设置它们的位置并扭曲整个电路板。我读过使用 LayoutManagers 会干扰 JLayeredPane 上的图层定位,所以这并不奇怪。 (尽管 JLayeredPane 教程中的 Oracle 演示程序似乎可以很好地做到这一点:http://download.oracle.com/javase/tutorial/uiswing/examples/components/LayeredPaneDemo2Project/src/components/LayeredPaneDemo2.java)
但是,我也尝试将 JPanel 的网格放入它自己的 JPanel,然后将其添加到 JLayeredPane 的低层,我的想法是我可以将拖放图标添加到单独的非透明 JPanel在 JLayeredPane 的更高层上。但是,当我这样做时,在 JLayeredPane 中简单地拥有网格 JPanel 之后(即在添加拖放层之前),网格将不会显示。
我也尝试过覆盖 JLayeredPane 的paintComponent(和paint)方法来绘制片段图像,但是它们被 JPanel 隐藏(我可以通过将 JPanel 设置为不透明来看到它们确实存在)和据我所知,没有选项可以在 JLayeredPane 上设置图形图层。我也尝试使用框架的 glassPane 来绘制碎片,但那里也出现了不良行为。
任何帮助解释这种行为,或者我哪里出错了,将不胜感激!
【问题讨论】:
标签: java swing drag-and-drop chess jlayeredpane