2012-04-21 12 views
1

私は、フレームの右下1/4に半径60 centerdの円を描こうとしており、フレームの上半分を中心とする半径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

あなたが投稿した要件とコードが、問題の説明なしまたはあなたのコードに基づいて*特定の*質問。これを修正してください。 *正確に*あなたは立ち往生していますか? –

+1

このパターンは以前の質問と似ています。 StackOverflowはあなたの個人的な宿題をサービスするものではありません。ダウン投票と投票の終了。 –

+0

男、私は私の質問を編集しました! – BinaryLife

答えて

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

+0

お返事ありがとうございました。 – BinaryLife

関連する問題