Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaSwing-创建一个带有按钮和动态游戏板的窗口_Java_Image_Swing_Jpanel - Fatal编程技术网

JavaSwing-创建一个带有按钮和动态游戏板的窗口

JavaSwing-创建一个带有按钮和动态游戏板的窗口,java,image,swing,jpanel,Java,Image,Swing,Jpanel,我是JavaSwing新手,正在开发一个简单的应用程序,在窗口中显示棋盘游戏和可移动的棋子 现在,我有了一个足够好的界面:该应用程序构建在一个特殊的窗口类上,该类派生自JFrame,使用drawImage覆盖paint方法来显示电路板和部件(遍历部件以收集位置信息) 然而,当我试图在整个游戏窗口中添加一些按钮和文本显示区域时,出现了一个问题。在明确单击它们之前,它们都不会显示。通过一些研究,我发现在这种情况下,覆盖油漆会把事情搞砸;显然,你可以乱画或使用按钮等,但这两者都不太容易 作为一种替代方

我是JavaSwing新手,正在开发一个简单的应用程序,在窗口中显示棋盘游戏和可移动的棋子

现在,我有了一个足够好的界面:该应用程序构建在一个特殊的
窗口
类上,该类派生自
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
方法。看一看