尽量不要混合使用Swing和AWT

时间:2012-08-08 19:47:14

标签: java swing jframe awt mixing

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

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

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

感谢。

2 个答案:

答案 0 :(得分:3)

您应该只使用Swing组件。例如。您应该从Button转到JButton以及所有替换控件。

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都很常见,例如事件处理和布局mgmt在两者之间也很常见

答案 1 :(得分:3)

  • 您可以使用JComponent(尚未实施LayoutManager)或JPanel(已实施FlowLayout)而不会出现任何问题(与{{1相比)使用Canvas

  • 中编译的代码进行绘画
  • 必须将方法Java6/7更改为paint(AWT Component),更多信息在Graphics(2D)

  • paintComponent(Swing JComponent)中使用Canvas是有原因的,例如需要访问来自21th century的资源的高性能或硬图形代码,例如Native OSCAD / CAM的图片和基于3D的图片,OpenGL/CL

  • 使用Swing Timer代替普通multimedia players

  • 使用KeyBindings代替KeyListener