簡體   English   中英

Java制作一個調用drawOval的drawCircle方法

[英]Java making a drawCircle method calling drawOval

我需要制作一個看起來像的drawCircle方法

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

您可以通過在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);
}
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);
}

好處:

  • 您不必通過或獲取Graphics上下文。
  • 您可以選擇是繪制還是填充圓形而不更改方法(例如g.draw(getCircle(x, y, r));在paint()方法中執行g.draw(getCircle(x, y, r));g.fill... )。
  • 您可以使用AWT draw Method語法實際繪制/填充圓。
  • 您會在雙精度坐標中得到一個圓。

您說過“ drawCircle方法需要調用drawOval。”,但是也許您只是不知道替代方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM