自定义组件未显示在 JPanel 上

问题描述 投票:0回答:1

我是 java swing 库的新手,正在尝试创建自己的组件。在本例中,我有一个继承 JComponent 类的 Circle 类。但是,当尝试将 Circle 类的实例添加到我的 JPanel 时,圆圈未显示(仅显示 JPanel)。

我知道使用 Graphics 类直接绘制到 JPanel 会更简单,但我希望能够创建自己的视觉类。

这是我的代码:

导入javax.swing。; 导入 java.awt.;

public class Main{
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JPanel myPanel = new JPanel();
        myPanel.setBackground(Color.CYAN);
        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myPanel.add(new Circle());
        frame.add(myPanel);
        frame.setVisible(true);
    }
}
import javax.swing.*;
import java.awt.*;

public class Circle extends JComponent {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.RED);
        g.fillOval(50, 50, 100, 100);
    }
}

运行此代码时,仅出现 JPanel 的青色背景。 JPanel 是否覆盖了红圈?我是否错误地重写了paintComponent方法?

java swing jpanel jcomponent
1个回答
0
投票

您应该添加

BorderLayout
。您可以使用以下代码:

...
JPanel myPanel = new JPanel();
myPanel.setLayout(new BorderLayout());
myPanel.add(new Circle(), BorderLayout.CENTER);
frame.add(myPanel);
myPanel.setBackground(Color.CYAN);
...
© www.soinside.com 2019 - 2024. All rights reserved.