Java делает метод drawCircle, вызывающий drawOval - PullRequest
0 голосов
/ 28 июля 2010

Мне нужно сделать метод drawCircle, который выглядит как

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

, который рисует круг с этим центром и радиусом. Метод drawCircle должен вызывать drawOval. Я не уверен, как я могу вызвать drawOval из моего метода drawCircle, не передавая ему 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);
    }
}

Ответы [ 2 ]

3 голосов
/ 28 июля 2010

Вы можете получить графический контекст, вызвав 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 однако.Вам гораздо лучше вызывать свой метод drawCircle () из метода paint () и передавать его в контекст Graphics.

Например,

public void paint(Graphics g) {
  super.paint(g);
  drawCircle(g, 10, 10, 5, 5);
}
0 голосов
/ 20 апреля 2014
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);
}

Преимущества:

  • Вам не нужно передавать или получать графический контекст.
  • Вы можете выбрать, рисовать или заполнять круг, не изменяя метод.(например, выполните g.draw(getCircle(x, y, r)); или g.fill... в своем методе paint ()).
  • Синтаксис метода рисования AWT используется для фактического рисования / заполнения круга.
  • Вы получаете круг в два разаточные координаты.

Вы сказали, что «метод drawCircle должен вызывать drawOval.», но, возможно, вы просто не знали об альтернативе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...