2012-05-11 31 views
1

我有一个包含几个简单形状的Ellipse2Ds的JFrame。我想调整框架的大小以适合尺寸为(240, 240)的对象包含几个Graphics2D对象的JFrame.pack()阻止包含对象的可见性

当我打包JFrame时,其调整大小为最小窗口大小,而不是包含的对象的大小。

我还应该说,如果我在JFrame上使用setSize(240, 240),它将设置外部窗口大小,而不是包含的对象的大小,因此Windows UI覆盖了一半所包含的Graphics2D对象。

如何根据包含的Graphics2D对象的大小调整JFrame的大小。我看到他们没有方法setPreferredSize(),这使得这很奇怪复杂。

import java.awt.Color; 
import java.awt.Dimension; 
    import java.awt.Graphics; 
    import java.awt.Graphics2D; 
    import java.awt.RenderingHints; 
    import java.awt.geom.Ellipse2D; 

    import javax.swing.JFrame; 
import javax.swing.JPanel; 

    public class GUIMain extends JPanel{ 

     private int maxwidth = 240; 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(maxwidth, maxwidth); 
     } 

     @Override 
     public void paintComponent(Graphics g) 
     { 
      Graphics2D g2d = (Graphics2D) g; 
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

      float i; 
      float imax = 4; 
      Ellipse2D.Double circle = new Ellipse2D.Double(); 

      for(i = imax; i > 0; i--){ 
       circle.width = (int)maxwidth*(i/imax); 
       circle.height = (int)maxwidth*(i/imax); 
       circle.x = (maxwidth/2)-(circle.width/2); 
       circle.y = (maxwidth/2)-(circle.width/2); 

       if((i % 2) == 0){ 
        g2d.setColor(Color.red); 
       }else{ 
        g2d.setColor(Color.blue); 
       } 
       g2d.fill(circle); 
      } 
     } 

     public static void main(String[] args) { 

      JFrame frame = new JFrame("Lame..."); 
      frame.add(new GUIMain()); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      //frame.setSize(maxwidth, maxwidth); 
      frame.pack(); 
      frame.setLocationRelativeTo(null); 
      frame.setVisible(true); 
      frame.setResizable(false); 
     } 

    } 

编辑:好的,现在我已经修改了上面的代码。除了窗口在12px底部的右边填充。看起来像这样。

http://i.imgur.com/Ilp39.jpg

回答

4

你可能不绘制直接Ellipse2D的对象在JFrame中,而是在JPanel的paintComponenet(...)方法JFrame中显示。您将要覆盖此JPanel的getPreferredSize(),以便它计算并返回一个允许显示所有椭圆的Dimension。

+0

我将编辑顶部以显示剩余的代码减去我绘制的形状。 – Supernovah

+0

@Supernovah:在审查您发布的代码之后,我的建议保持不变,除非您想要放弃所有的JPanel的'paintComponent(...)'方法,而不是它的'paint(...)'方法Swing图形的好处。 –

+0

也正如你可以看到在三个连续注释行,应该设置框架的优先大小不?被迫成为'(240,240)'。但它仍然提出设置为“(240,240)”而不是内部的外部尺寸。 – Supernovah