在同一JPanel框架上添加多个Polygon对象

所以我有一个DrawStar类,使用Polygon绘制一个星形:

public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; int[] cX = new int[] {x, x+5, x+20, x+8, x+16, x, x-16, x-8, x-20, x-5, x}; int[] cY = new int[] {y, y+14, y+14, y+22, y+39, y+29, y+39, y+22, y+14, y+14, y}; Polygon pol = new Polygon(cX, cY, 11); g2.setColor(this.color); g2.draw(pol); g2.fillPolygon(pol); } 

然后在我的主要课程中,我创建一个JPanel框架来绘制星星:

  ... JFrame starsframe = new JFrame(); starsframe.setTitle("Random stars..."); starsframe.setSize(600, 400); starsframe.setLocationRelativeTo(null); starsframe.setVisible(true); starsframe.setResizable(false); starsframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); DrawStar star1 = new DrawStar(300, 200, CreateColor(color)); starsframe.add(star1); DrawStar star2 = new DrawStar(400, 300, CreateColor(color)); starsframe.add(star2); ... 

但是,它只适用于一颗星。 如果我添加第二个(如上所示),则不绘制任何内容(CreateColor是我为星形颜色实现的function)。 如何在框架上添加它们? 还有一件事,即使我将框架的背景颜色设置为黑色,它也会在绘制星星后变为灰色。

谢谢!

我重现你的问题。 这是Layout问题。 默认情况下, JFrame具有与CENTER对齐的BorderLayout 。 您应该更改布局和屏幕大小。

 JFrame starsframe = new JFrame(); starsframe.setTitle("Random stars..."); starsframe.setLayout(new GridLayout( 1,2));// Use gridLayout DrawStar star1 = new DrawStar(300, 200, Color.red); starsframe.add(star1); DrawStar star2 = new DrawStar(400, 300, Color.blue); starsframe.add(star2); starsframe.setSize(1000,700);// Increase the screen size. starsframe.setLocationRelativeTo(null); starsframe.setVisible(true); starsframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

为了看到两颗星,我使用GridLayout(1,2)和更大的setSize(1000, 700) 。 但这不是最佳解决方案。 你应该使用getWidth()getHeight()方法动态获得与屏幕大小相对应的xy