Java - 覆盖paint(Graphics g)方法来自>变量<

时间:2015-04-15 16:30:07

标签: java awt override paint

我班上有一个Canvas变量。如何覆盖paint()的{​​{1}}方法?我知道你可以创建一个单独的类并扩展Canvas,但在这种情况下我想保留我的变量。

Canvas

这是我的班级:

//This is the method i am looking for
  public void paint(Graphics g) {
     super.paint(g)
  }

2 个答案:

答案 0 :(得分:2)

首先,避免在Swing GUI中使用Canvas和AWT组件,而是使用JPanel并覆盖其paintComponent。如果需要,您可以通过以下方式轻松完成此操作:

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.*;

public class OverridePaintComponent extends JPanel {
   private static final int PREF_W = 400;
   private static final int PREF_H = PREF_W;

   public OverridePaintComponent() {
      // TODO add junk to GUI
   }

   @Override
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);

      // draw here
   }

   @Override
   public Dimension getPreferredSize() {
      if (isPreferredSizeSet()) {
         return super.getPreferredSize();
      }
      return new Dimension(PREF_W, PREF_H);
   }

   private static void createAndShowGui() {
      JFrame frame = new JFrame("OverridePaintComponent");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(new OverridePaintComponent());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

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

答案 1 :(得分:1)

您可以使用匿名类:

canvas = new Canvas() {
    @Override
    public void paint() {
        super.paint();
        // your code here
    }
};

你确定这是你想做的吗?我建议您使用Swing和Swing API,而不是直接修改paint(),除非您知道自己在做什么。