2012-04-21 158 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