使用Java中的AWT和组件绘图

时间:2014-10-25 13:59:38

标签: java awt

我目前用AWT用Java制作游戏。主类扩展了Frame,我一直用它来使用.getGraphics()和.drawRect()绘制图形。这一直很好,除了当我向框架添加标签等组件时,它停止渲染图形并仅显示组件。

1 个答案:

答案 0 :(得分:2)

唐'吨

  • 使用getGraphics()进行绘画。这不是正确的方法。
  • 尝试在JFrame
  • 等顶级容器上绘画

相反

  • 在JPanel或JComponent上绘画(我更喜欢前者)
  • 覆盖JPanel的paintComponent(Graphics g)方法。在此方法中执行所有绘制,使用隐式传递的Graphics上下文。您永远不必实际调用 paintComponent,因为它会被隐式调用。

修改

  • 刚刚注意到你正在使用AWT。你真的应该考虑升级到Swing。否则,您需要覆盖paintComponent,而不是paint,因为AWT组件没有paintComponent方法。但我强烈建议你使用Swing

示例(使用Swing)

public class SimplePaint {
    public SimplePaint() {
        JFrame frame = new JFrame();
        frame.add(new DrawPanel());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    class DrawPanel extends JPanel {
        @Override
        public Dimension getPreferredSize() {
            return new Dimension(300, 300);
        }
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.fillRect(50, 50, 150, 150);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new SimplePaint();
            }
        });
    }
}