【问题标题】:Trying not to mix Swing and AWT尽量不要混合 Swing 和 AWT
【发布时间】:2012-08-06 00:11:28
【问题描述】:

我正在用 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 吗?可以吗?

谢谢。

【问题讨论】:

    标签: java swing jframe awt mixing


    【解决方案1】:
    • 您可以使用JComponent(尚未实现LayoutManager)或JPanel(已实现FlowLayout)没有任何问题(与Canvas相比)使用@编译的代码进行绘画987654330@

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

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

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

    • 使用KeyBindings 而不是KeyListener

    【讨论】:

      【解决方案2】:

      您应该只使用 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 的某些方面是共同的,例如事件处理和布局管理在两者之间也是共同的

      【讨论】:

        猜你喜欢
        • 2013-09-25
        • 2011-08-29
        • 2014-06-14
        • 1970-01-01
        • 2010-11-17
        • 1970-01-01
        • 1970-01-01
        • 2010-09-29
        • 2011-12-06
        相关资源
        最近更新 更多