【问题标题】:Java - override paint(Graphics g) Method from >variable<Java - 覆盖 >variable< 中的paint(Graphics g) 方法
【发布时间】: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);
}

【问题讨论】:

    标签: java awt overriding paint


    【解决方案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(),除非你知道自己在做什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-06
        • 2022-01-02
        • 1970-01-01
        • 2016-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多