为什么我的 jPanel 中没有显示椭圆?

问题描述

我正在尝试向我的 JPanel 添加一个圆圈,但它不会绘制圆圈。 下面的代码创建一个 JFrame,创建一个 JPanel 并调用一个函数来向 JPanel(pgame) 添加一个圆,但它实际上并没有添加它。 感谢帮助

fgame = new JFrame("Backgammon");
fgame.setSize(1000,1000);
pgame = new JPanel();
pgame.setPreferredSize(new Dimension(1000,687));

pgame.setLayout(new GridLayout(3,10));
pgame.setBorder(BorderFactory.createEmptyBorder(309,460,150,460));
    
Circle Circlepanel = new Circle();
pgame.add(Circlepanel);
Circlepanel.setVisible(true);
    
fgame.add(pgame,BorderLayout.CENTER);       
fgame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
fgame.setTitle("Backgammon");
fgame.pack();
fgame.setVisible(true);

public class Circle extends JPanel {
public void paint(Graphics g) {
    g.drawoval(500,500,100,100);
    g.setColor(Color.RED);
    g.filloval(500,100);
}

}

解决方法

首先,变量名不应以大写字符开头。你们大多数人的名字是正确的,但不是全部。学习 Java 约定并保持一致!

您创建一个 GridLayout

pgame.setLayout(new GridLayout(3,10));

这将尝试为框架中的 3 个组件垂直分配空间。

然后你创建一个边框:

pgame.setBorder(BorderFactory.createEmptyBorder(309,460,150,460));

这将使您的组件高度为 459,宽度为 920。

最后,您尝试在面板左上角 (500,500) 处绘制椭圆。

g.drawOval(500,500,100,100);

嗯,问题是你有奇怪的随机数,而且你的组件的大小不够大,无法在组件的空间中绘制椭圆。

为了演示这个添加和重新测试:

Circlepanel.setBackground( Color.YELLOW );

您将看到一个黄色面板。下一个变化:

//pgame.setLayout(new GridLayout(3,10));
pgame.setLayout(new GridLayout(1,0));

您会在框架中间看到一个更高的黄色面板,因为您只为单个组件分配空间。

下一个变化:

//pgame.setBorder(BorderFactory.createEmptyBorder(309,460));
pgame.setBorder(BorderFactory.createEmptyBorder(50,50,50));

您将看到椭圆的一部分,因为您为边框保留的空间较少。

下一个变化:

//g.fillOval(500,100);
g.fillOval(0,100);

您将在面板顶部看到椭圆形。

重点是指定:

  1. 网格大小
  2. 边框大小
  3. 椭圆位置

都会影响组件的大小及其绘制方式。

其他问题:

  1. 覆盖 Circle 类的 getPreferredSize() 方法以返回所需的面板大小
  2. 自定义绘画是通过覆盖 paintComponent() 而不是paint()来完成的;
  3. 您需要在方法开始时调用 super.paintComponent(..)

阅读关于 Custom Painting 的 Swing 教程中的部分,了解更多信息和工作示例。