Swing:无法绘制矩形

Swing: can't paint rectangle

我有这个简单的代码:JFrame 添加了自定义 Jpanel MyPanel,它覆盖了 paintComponent 方法来绘制矩形。但是 window:

上没有显示任何内容
import javax.swing.*;

import java.awt.*;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestGui extends JFrame  {
    public TestGui()  {
        setLayout(new FlowLayout());

        JPanel panel = new JPanel();

        panel.add(new JLabel("H E L L O"));
        getContentPane().add(panel);

        getContentPane().add(new MyPanel());

        setSize(100, 100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        repaint();
        revalidate();
        setVisible(true);
    }

    class MyPanel extends JPanel {
        private int squareX = 50;
        private int squareY = 50;
        private int squareW = 20;
        private int squareH = 20;

        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.RED);
            g.fillRect(squareX,squareY,squareW,squareH);
        }
    }

    public static void main(String[] args) {
        TestGui gui = new TestGui();
    }
}

默认情况下,空 JPanel 的大小为 0x0,因此当您将它添加到 UI 时,布局管理器(在本例中)会尊重它的请求并且使之成为 0x0

首先添加...

@Override
public Dimension getPreferredSize() {
    return new Dimension(100, 100);
}

MyPanel

此外,repaintrevalidate 调用不会执行任何操作,因为 window 尚未附加到本机对等点(渲染表面)