2012-04-21 121 views
1

我正在畫框的右下角四分之一處繪製一個半徑爲60的圓,以及以框架的上半部爲中心的半徑爲50的正方形。如何繪製指定半徑的圓形和矩形?

框架尺寸爲300 x 300. 我這樣做到現在爲止。

import java.awt.*; 
import javax.swing.*; 
import java.awt.geom.*; 
public class Test { 

    public static void main (String[] args){ 

     JFrameTest5 frame = new JFrameTest5(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     frame.setTitle("Test"); 


    } 
} 
class JFrameTest5 extends JFrame { 

    public JFrameTest5() 
     { 
      setLocation(0,0); 
      setSize(300,300); 

     PanelTest1 panel = new PanelTest1(); 
    add(panel);   
     } 


     } 

class PanelTest1 extends JPanel 

{ 

    public void paintComponent(Graphics g) 
    { 
     Graphics2D g2 = (Graphics2D)g; 

     Ellipse2D circle = new Ellipse2D.Double(250, 225, 120,120); 
     g2.draw(circle); 

     Rectangle2D rect = new Rectangle2D.Double(75,0,100,100); 
     g2.draw(rect); 

    } 

} 

問題是圓形和矩形似乎不正確,有沒有其他方法來設置確切的半徑?下面

+1

你已經張貼要求和代碼,但沒有一個問題的描述或根據您的代碼* *的具體問題。請解決這個問題。你究竟在哪裏*卡住了? – 2012-04-21 02:13:34

+1

請注意,此模式與您以前的問題類似。 StackOverflow不是你做個人作業的功課。降低投票和投票結束。 – 2012-04-21 02:15:22

+0

男人,我編輯了我的問題! – BinaryLife 2012-04-21 02:16:51

回答

5

的例子包括幾個重要的變化:

  • 使用常量儘可能。

  • 使用面板相對幾何。

  • 正確使用initial threads

  • 使用pack()來調整封閉幀的大小。

代碼:

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.geom.Ellipse2D; 
import java.awt.geom.Rectangle2D; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

/** #see http://stackoverflow.com/a/10255685/230513 */ 
public class Test { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrameTest frame = new JFrameTest(); 
      } 
     }); 
    } 
} 

class JFrameTest extends JFrame { 

    public JFrameTest() { 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setTitle("Test"); 
     this.add(new JPanelTest()); 
     this.pack(); 
     this.setLocationByPlatform(true); 
     this.setVisible(true); 
    } 
} 

class JPanelTest extends JPanel { 

    private static final int R = 60; 
    private static final int D = 2 * R; 
    private static final int W = 50; 
    private static final int E = 2 * W; 

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

    @Override 
    public void paintComponent(Graphics g) { 
     Graphics2D g2 = (Graphics2D) g; 
     Ellipse2D circle = new Ellipse2D.Double(
      getWidth() - D, getHeight() - D, D, D); 
     g2.draw(circle); 
     Rectangle2D rect = new Rectangle2D.Double(0, 0, E, E); 
     g2.draw(rect); 
    } 
} 
+0

居中對象仍有待完成。 – trashgod 2012-04-21 02:44:23

+0

感謝您提供的最佳答案和信息。 – BinaryLife 2012-04-21 04:01:38

相關問題