Java 画布绘制方法不适用于JLayeredPane

Java 画布绘制方法不适用于JLayeredPane,java,swing,jframe,Java,Swing,Jframe,我一直在尝试使用JLayeredPane在JFrame中创建两层图像,但是我无法在Canvas类中使用paint()函数绘制形状。 以下是我写的: package com.baduk.main; import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.ImageIcon; import javax.swing.J

我一直在尝试使用JLayeredPane在JFrame中创建两层图像,但是我无法在Canvas类中使用paint()函数绘制形状。 以下是我写的:

package com.baduk.main;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

public class Game extends Canvas implements Runnable {

    private ImageIcon icon;
    private JLabel back;
    private JLayeredPane layer;
    /**
     * 
     */
    private static final long serialVersionUID = -3441156857004256039L;

    public Game() {
        
        //Background image with depth 0 
        icon = new ImageIcon("C:/Users/scaraven/Downloads/baduk_board.png");
        back = new JLabel(icon);
        back.setBounds(0,0,icon.getIconWidth(),icon.getIconHeight());
        
        //Create JFrame
        JFrame frame = new JFrame("BADUK");
        frame.setSize(new Dimension(icon.getIconWidth()+5,icon.getIconHeight()+25));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        
        //Create JLayeredPane
        layer = new JLayeredPane();
        
        
        layer.add(back,new Integer(1));
        layer.add(this,new Integer(0));
        
        
        frame.setContentPane(layer);
        frame.setVisible(true);
    }
    
    public static void main(String[] args) {
        new Game();

    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        
    }
    public void paint(Graphics g) {
        g.setColor(Color.black);
        g.fillRect(10, 10, 100, 100);
    }

}

根据我写的,一个Jframe应该以一个图像作为背景,在顶部有一个黑色的矩形,但是我只得到图像。有人知道我写的代码有什么问题,我需要修改什么吗?

画布是重量级的;Swing组件是轻量级的。使用JPanel代替画布,并重写其
paintComponent
方法而不是paint。看。我想你需要设置自定义图层的边界。您可能应该首先在没有背景图像图标的情况下进行调试,以确保您没有在顶部进行绘制。官方的JLayeredPane教程没有问题。画布很重;Swing组件是轻量级的。使用JPanel代替画布,并重写其
paintComponent
方法而不是paint。看。我想你需要设置自定义图层的边界。您可能应该首先在没有背景图像图标的情况下进行调试,以确保您没有在顶部进行绘制。官方的JLayeredPane教程没有问题。