Java制作一个调用drawOval的drawCircle方法

时间:2010-07-27 23:45:19

标签: java user-interface graphics

我需要制作一个看起来像

的drawCircle方法
public void drawCircle(int x, int y, int radius)

绘制具有该中心和半径的圆。 drawCircle方法需要调用drawOval。我不知道如何在不将Graphics传递给它的情况下从drawCircle方法调用drawOval。这可能吗?

继承我所拥有的:

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);
    }
}

2 个答案:

答案 0 :(得分: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上下文。

E.g。

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

答案 1 :(得分: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 * 2, r * 2);
}

优点:

  • 您不必传递或获取图形上下文。
  • 您可以选择是否在不更改方法的情况下绘制或填充圆圈(例如,在paint()方法中执行g.draw(getCircle(x, y, r));g.fill...)。
  • 您使用AWT绘制方法语法来实际绘制/填充圆圈。
  • 你得到一个双精度坐标的圆圈。

你说“drawCircle方法需要调用drawOval。”,但也许你只是不知道替代方法。