2010-07-27 33 views
0

我需要做,看起來像Java的製作方法畫圓調用drawOval

public void drawCircle(int x, int y, int radius) 

,吸引與圓心和半徑的圓圈畫圓一個方法。 drawCircle方法需要調用drawOval。我不知道如何從drawCircle方法調用drawOval而不將Graphics傳遞給它。這可能嗎?

繼承人我有:

import java.awt.*; 
import javax.swing.*; 

class test 
{ 
    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame("test"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.getContentPane().add(new MyPanel()); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
class MyPanel extends JPanel 
{ 

    MyPanel() 
    { 
     setBackground(Color.WHITE); 
     setPreferredSize(new Dimension(250,250)); 
    } 

    public void paintComponent(Graphics page) 
    { 
     super.paintComponent(page); 
     drawCircle(50,50,20); 
    } 

    private void drawCircle(int x, int y, int radius) 
    { 
     drawOval(x - radius, y - radius, radius*2, radius*2); 
    } 
} 
+0

爲什麼你必須通過傳遞圖形來做到這一點? – 2010-07-27 23:47:32

+0

你不必在paintComponent中調用drawOval,比如g.drawOval(),其中g是Graphics? – Raptrex 2010-07-27 23:49:00

+0

通過「將圖形傳遞給它」來引用Java庫對象嗎?發佈更完整的代碼。 – 2010-07-27 23:49:09

回答

3

您可以通過在Swing組件調用getGraphics()獲得圖形上下文。但我仍然會創建我的繪圖方法來接受圖形上下文。

例如

private void drawCircle(Graphics g, int x, int y, int radius) { 
    g.fillOval(x-radius, y-radius, radius*2, radius*2) 
} 

另外,

private void drawCircle(int x, int y, int radius) { 
    getGraphics().fillOval(x-radius, y-radius, radius*2, radius*2) 
} 

注意一個事實,即getGraphics()但是可以返回null。你最好在paint()方法內調用drawCircle()方法,並將它傳遞給Graphics上下文。

例如

public void paint(Graphics g) { 
    super.paint(g); 
    drawCircle(g, 10, 10, 5, 5); 
} 
+0

是的,但這是一個家庭作業問題。如果沒有Graphics的話,那麼我就告訴我的教授。 – Raptrex 2010-07-28 00:20:33

+0

謝謝,getGraphics()工作 – Raptrex 2010-07-28 00:33:06

+0

雅,即時通訊猜測它的返回null,當我在Windows上測試它,但是,它適用於OSX。 – Raptrex 2010-07-28 04:43:29

0
import java.awt.Shape; 
import java.awt.geom.Ellipse2D; 

public static Shape getCircle(final double x, final double y, final double r) { 

    return new Ellipse2D.Double(x 
      - r, y - r, r * 2d, r * 2d); 
} 

優點:

  • 您沒有通過或獲得圖形上下文。
  • 您可以選擇是否繪製或填充圓而不更改方法(例如,在paint()方法中執行g.draw(getCircle(x, y, r));g.fill...)。
  • 您使用AWT繪製方法語法來實際繪製/填充圓。
  • 你在雙精度座標中得到一個圓。

你說「drawCircle方法需要調用drawOval」,但也許你只是沒有意識到替代。