我是 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方法?
您应该添加
BorderLayout
。您可以使用以下代码:
...
JPanel myPanel = new JPanel();
myPanel.setLayout(new BorderLayout());
myPanel.add(new Circle(), BorderLayout.CENTER);
frame.add(myPanel);
myPanel.setBackground(Color.CYAN);
...