2012-05-11 38 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