2013-03-19 67 views
0

我是Java Swing的新手,我正在研究一个简单的应用程序,该应用程序在窗口中显示棋盘游戏和可移动块。Java Swing - 使用按钮和动态游戏板创建窗口

现在,我有一个好足够的接口:应用是建立在从JFrame派生的特殊Window类,以覆盖显示使用drawImage(通过片迭代来收集位置信息的棋盘和棋子的paint方法它去)

但是,当我试图添加一些按钮和文本显示区域到整个游戏窗口,但有一个问题。他们没有被显示,直到他们明确点击。通过一些研究,我发现在这样的情况下,覆盖油漆会让事情变得糟糕;显然,你可以混淆paint或使用按钮等,但不是真的/很容易。

作为一种替代方法,我遇到了一个教程,该教程展示了如何将图像绘制到JPanel上,我想我可以在板/块上使用它,然后像处理其他任何按钮或小部件一样对待(?)在我走下任何死胡同的街道之前(看起来像一个愚蠢的问题,但相信我......),我想问:这是一个好方法吗?或者,还有更好的方法?

+2

应该有很少的理由不断超越像'JFrame',而是作为Reimeus指出,使用像一个'JPanel'顶层容器的'paint'方法并覆盖它的'paintComponent'方法。看看[执行自定义绘画](http://docs.oracle.com/javase/tutorial/uiswing/painting/)和[在AWT和Swing中绘画](http://www.oracle.com/technetwork/ java/painting-140037.html) – MadProgrammer 2013-03-19 23:39:09

回答

2

听起来好像你不是在paint方法中调用super.paint(g)。真的,你不应该在像JFrame这样的顶级容器中拥有自定义绘画功能。

理想情况下,您应该使用该替代方法并将其移动到基于新的JComponent的类。在这里,您需要覆盖paintComponent,并且还请拨打super.paintComponent(g)。如果您需要将子组件添加到新组件,那么当然JPanel是一个很好的容器。

+0

听起来像OP调用'super.paint(g)',然后绘制结果。用于'JPanel#paintComponent'的+1 – MadProgrammer 2013-03-19 23:37:30