如何在JFrame中放置两个椭圆,这两个椭圆都占据全屏

时间:2013-01-06 16:55:08

标签: java swing layout jframe jpanel

我需要在JFrame中放置两个椭圆。每个椭圆形都在不同的内部阶层。问题在于使用BorderLayout,当使用CENTER时,它允许您跨越整个帧。但是我不能添加第二个椭圆,因为它在第一个椭圆上被覆盖。

我可以使用哪种布局管理器将这两个椭圆涂在整个屏幕上?这些将是动画的,因此最终可能会彼此重叠,所以我需要它们都在整个屏幕上绘制。

---- ----编辑

Oval是一个JPanel,所以我有两个不同位置的两个不同椭圆形的JPanel。

我尝试像这样使用BoxLayout:

 mainPanel = new JPanel();
 mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS));

 mainPanel.add(drawPanel1);
 mainPanel.add(drawPanel2);

 frame.getContentPane().add(BorderLayout.CENTER, mainPanel);

然而,一旦椭圆穿过中心,当一个面板占据屏幕的上半部分而另一个面板占据屏幕的下半部分时,它会消失。除此之外它工作正常。我唯一需要的是修复布局,以便它们占据所有屏幕

我也尝试过1行1列的GridLayout,但这仍然没有填满整个帧。

4 个答案:

答案 0 :(得分:5)

+1 mKorbel和HFOE答案。

使用HFOEs建议:

Herre是我做的一个例子:

它使用MyOval类(一个建模的类来保存足够的数据来绘制一个ceartain颜色的椭圆),它还使用一个名为JPanel的{​​{1}},其中包含一个{ {1}} DrawPanel类以及要添加到ArrayList的方法。

{J}框架中MyOval被添加到框架可见,而不是使用ArrayListJPanel类添加2个椭圆,这将增加一个新的椭圆形,并添加到arraylist和call重新绘制,然后调用DrawPanel的{​​{1}}。

enter image description here

addOval(...)

NB是的,我们不能看到这两个椭圆形,但因为它们只是在同一个坐标上:

paintComponent

看到对方是这样的:

enter image description here

答案 1 :(得分:4)

不是绘制两个GUI组件并将它们添加到JFrame,而是考虑在同一JPanel的paintComponent(...)方法中绘制椭圆,并将该JPanel添加到JFrame的contentPane BorderLayout.CENTER中。有关更详细的答案,请在您的问题中提供更多信息。

如果你想让椭圆彼此分开,并且如果它们必须在扩展JComponent或其中一个孩子的类中,那么请查看mKorbel的答案(1+)。或者如果它们需要相互重叠,那么可能使用JLayeredPane,并使用非不透明的JPanel。

答案 2 :(得分:3)

  

我可以使用什么布局管理器来绘制这两个椭圆   整个屏幕?

请参阅GridLayoutBoxLayout

答案 3 :(得分:-1)

我必须回答我自己的问题,因为我设法用GridLayout和BoxLayout修复它。虽然可能有一种方法可以通过这种布局实现这一点,但我发现更容易做到没有布局。

以下是代码:

    frame.setLayout(null);
    frame.getContentPane().add(drawPanel1);
    frame.getContentPane().add(drawPanel2);
    drawPanel1.setBounds(0, 0, frame.getWidth(), frame.getHeight());
    drawPanel2.setBounds(0, 0, frame.getWidth(), frame.getHeight());

此代码使两个面板都能够接管整个帧大小,最终解决了这个问题。