Java-覆盖绘制(图形g)方法,来自>;变量<;

Java-覆盖绘制(图形g)方法,来自>;变量<;,java,awt,overriding,paint,Java,Awt,Overriding,Paint,我的类中有一个Canvas变量。如何从Canvas重写paint()方法?。我知道您可以创建一个单独的类并扩展Canvas,但在这种情况下,我希望保留我的变量 //This is the method i am looking for public void paint(Graphics g) { super.paint(g) } 这是我的班级: private JFrame frame; private Canvas canvas; public SimpleSkinCr

我的类中有一个
Canvas
变量。如何从
Canvas
重写
paint()
方法?。我知道您可以创建一个单独的类并扩展
Canvas
,但在这种情况下,我希望保留我的变量

//This is the method i am looking for
  public void paint(Graphics g) {
     super.paint(g)
  }
这是我的班级:

private JFrame frame;
private Canvas canvas;

public SimpleSkinCreator() {
    canvas = new Canvas();
    canvas.setPreferredSize(new Dimension(WIDTH, HEIGHT));
    canvas.setBackground(Color.black);
    canvas.setFocusable(true);
    canvas.requestFocus();

    frame = new JFrame("AvarionDE's - SimpleSkinEditor");
    frame.add(canvas);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

首先,避免在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();
         }
      });
   }
}

首先,避免在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();
         }
      });
   }
}

您可以使用匿名类:

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

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

您可以使用匿名类:

canvas = new Canvas() {
    @Override
    public void paint() {
        super.paint();
        // your code here
    }
};
你确定这就是你想做的吗?我建议使用Swing和Swing API,不要直接修改
paint()
,除非您知道自己在做什么