0

我正在用Java制作游戏。我找到了这个教程: http ://www.gamedev.net/page/resources/_/technical/general-programming/java-games-active-rendering-r2418

它展示了如何进行主动渲染。他们使用 Canvas 进行绘画。到目前为止,我一直在使用 JPanel;但是,我想切换到这种方法。现在,我有几个 JPanel 和一些 JButton 添加到 JPanel。我想知道我是否应该改用 java.awt.Button 和 java.awt.Panel,以免混合 Swing 和 AWT 组件。

另一方面,在本教程中,Canvas 位于 JFrame 中,那么这不是已经混合了 Swing 和 AWT 吗?可以吗?

谢谢。

4

2 回答 2

3

您应该只使用 Swing 组件。例如,你应该去 from ButtontoJButton和所有的替换控件。

AWT Component                         (Closest) Swing Replacement  
Button                                          JButton  
Canvas                                          JPanel  
Checkbox                                        JCheckBox  
Checkbox in CheckboxGroup                       JRadioButton in ButtonGroup  
Choice                                          JComboBox  
Component                                       JComponent  
Container                                       JPanel  
Label                                           JLabel  
List                                            JList    
Menu                                            JMenu  
MenuBar                                         JMenuBar  
MenuItem                                        JMenuItem  
Panel                                           JPanel  
PopupMenu                                       JPopupMenu   
Scrollbar                                       JScrollBar  
ScrollPane                                      JScrollPane  
TextArea                                        JTextArea  
TextField                                       JTextField  

但是有些方面是共同的AWTSwing例如事件处理和布局管理在两者之间也是共同的

于 2012-08-08T19:50:22.887 回答
3
  • 您可以使用JComponent(尚未实现LayoutManager)或JPanel(已实现FlowLayout)没有任何问题(与 相比Canvas)使用编译的代码进行绘画Java6/7

  • 必须将方法更改paint(AWT Component)paintComponent(Swing JComponent),更多在跟踪Graphics(2D)

  • Canvas使用in是有原因的21th century,例如用于需要访问来自的资源的高性能或硬图形代码Native OS,例如用于 的CAD / CAM图形3D和基于 的图形OpenGL/CLmultimedia players

  • 使用Swing Timer而不是普通的Thread

  • 使用KeyBindings而不是KeyListener

于 2012-08-08T20:52:45.873 回答