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



我正试图在我的JPanel中添加一个圆圈,但它不会画出这个圆圈。下面的代码创建一个JFrame,创建一个JPanle,并调用一个函数向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, 500, 100, 100);
}

}

首先,变量名不应以大写字符开头。你们大多数人的名字都是正确的,但不是所有人。学习Java惯例并保持一致!

您创建的GridLayout

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

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

然后创建一个边界:

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

这将使您的组件具有459的高度和920的宽度。

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

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,150,460));
pgame.setBorder(BorderFactory.createEmptyBorder(50,50,50,50));

你会看到椭圆形的一部分,因为你为边界预留了更少的空间。

下一个变化:

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

你会看到面板顶部的椭圆形。

重点是指定:

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

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

其他问题:

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

阅读Swing教程中关于自定义绘画的部分,了解更多信息和工作示例。

相关内容

  • 没有找到相关文章

最新更新