JavaSwing-创建一个带有按钮和动态游戏板的窗口
我是JavaSwing新手,正在开发一个简单的应用程序,在窗口中显示棋盘游戏和可移动的棋子 现在,我有了一个足够好的界面:该应用程序构建在一个特殊的JavaSwing-创建一个带有按钮和动态游戏板的窗口,java,image,swing,jpanel,Java,Image,Swing,Jpanel,我是JavaSwing新手,正在开发一个简单的应用程序,在窗口中显示棋盘游戏和可移动的棋子 现在,我有了一个足够好的界面:该应用程序构建在一个特殊的窗口类上,该类派生自JFrame,使用drawImage覆盖paint方法来显示电路板和部件(遍历部件以收集位置信息) 然而,当我试图在整个游戏窗口中添加一些按钮和文本显示区域时,出现了一个问题。在明确单击它们之前,它们都不会显示。通过一些研究,我发现在这种情况下,覆盖油漆会把事情搞砸;显然,你可以乱画或使用按钮等,但这两者都不太容易 作为一种替代方
窗口
类上,该类派生自JFrame
,使用drawImage
覆盖paint
方法来显示电路板和部件(遍历部件以收集位置信息)
然而,当我试图在整个游戏窗口中添加一些按钮和文本显示区域时,出现了一个问题。在明确单击它们之前,它们都不会显示。通过一些研究,我发现在这种情况下,覆盖油漆会把事情搞砸;显然,你可以乱画或使用按钮等,但这两者都不太容易
作为一种替代方法,我遇到了一个教程,它展示了如何在JPanel上绘制图像,我想我可以用在黑板/棋子上,然后在我走上任何死路之前,像其他按钮或小部件一样进行布局(?)(这似乎是一个愚蠢的问题,但相信我…),我想问:这是一个好办法吗?还是有更好的办法 听起来您并不是在
paint
方法中调用super.paint(g)
。实际上,您不应该在像JFrame
这样的顶级容器中拥有自定义绘制功能
理想情况下,您应该使用这种替代方法,并将其移动到一个新的基于JComponent
的类中。这里您需要重写paintComponent
,还需要调用super.paintComponent(g)
。如果您需要将子组件添加到新组件中,那么JPanel无疑是一个很好的容器
听起来好像OP正在调用super.paint(g)
然后在结果上进行绘制+1对于JPanel#paintComponent
,应该很少有理由重写顶级容器(如JFrame
)的paint
方法,相反,正如Reimeus所指出的,使用JPanel
之类的方法并重写它的paintComponent
方法。看一看