1. ホーム
  2. java

[解決済み] JavaでdrawCircleメソッドがdrawOvalを呼び出すようにする

2022-02-07 16:50:23

質問

次のような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);
    }
}

解決方法は?

グラフィックコンテキストを取得するには getGraphics() を swing コンポーネントで使用します。しかし、私は、グラフィックス・コンテキストを受け取るための描画メソッドを作成します。

例えば

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