Java - 覆盖 >variable< 中的paint(Graphics g) 方法

Posted

技术标签:

【中文标题】Java - 覆盖 >variable< 中的paint(Graphics g) 方法【英文标题】:Java - override paint(Graphics g) Method from >variable< 【发布时间】:2015-06-21 17:48:21 【问题描述】:

我的班级中有一个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);

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

你可以使用匿名类:

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

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

【讨论】:

以上是关于Java - 覆盖 >variable< 中的paint(Graphics g) 方法的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException: Unknown system variable 'query_cache_size'

解决问题:java.sql.SQLException: Unknown system variable 'tx_isolation'

Java environment variables setting on Linux

覆盖纯虚函数的参数个数

condition_variable.notify_all 是不是应该被互斥锁覆盖?

java数据放List前面数据被覆盖