Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java制作一个调用drawOval的drawCircle方法_Java_User Interface_Graphics - Fatal编程技术网

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

Java制作一个调用drawOval的drawCircle方法,java,user-interface,graphics,Java,User Interface,Graphics,我需要做一个drawCircle方法 public void drawCircle(int x, int y, int radius) 这画了一个圆心和半径相同的圆。drawCircle方法需要调用drawOval。我不知道如何从drawCircle方法调用drawOval,而不向其传递图形。这可能吗 以下是我所拥有的: import java.awt.*; import javax.swing.*; class test { public static void main(S

我需要做一个drawCircle方法

public void drawCircle(int x, int y, int radius)
这画了一个圆心和半径相同的圆。drawCircle方法需要调用drawOval。我不知道如何从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);
    }
}

您可以通过在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()方法,并将其传递给图形上下文

例如


您可以通过在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()方法,并将其传递给图形上下文

例如

优点:

  • 您不必通过或获取图形上下文
  • 您可以在不更改方法的情况下选择是绘制还是填充圆(例如,在paint()方法中执行
    g.draw(getCircle(x,y,r));
    g.fill…
  • 您可以使用AWT draw方法语法来实际绘制/填充圆
  • 在双精度坐标系中得到一个圆
您说过“drawCircle方法需要调用drawOval”,但可能您不知道还有其他选择

优点:

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

您说过“drawCircle方法需要调用drawOval.”,但可能您没有意识到另一种选择。

为什么要通过传递图形来完成此操作?您不需要在paintComponent中调用drawOval,比如g.drawOval(),其中g是图形吗?通过“向其传递图形”,您指的是Java库对象吗?发布更完整的代码。你想在哪个对象上调用drawCircle?如果您计划从java.awt.*库调用drawOval,则需要一个图形对象来调用yes上的方法。请给出更多的上下文。是的,我指的图形是Java库对象。为什么要传递图形?您不需要在paintComponent中调用drawOval,比如g.drawOval(),其中g是图形吗?通过“将图形传递给它”,您指的是Java库对象吗?发布更完整的代码。你想在哪个对象上调用drawCircle?如果您计划从java.awt.*库调用drawOval,则需要一个图形对象来调用yes上的方法。请给出更多的上下文。是的,我指的是Java库objectTrue的图形,但这是一个家庭作业问题。如果没有图形就做不到这一点,那么我就告诉我的教授。是的,当我在Windows上测试它时,我猜它会返回空值,然而,它在OSX上工作。是的,但这是一个家庭作业问题。如果没有图形就做不到这一点,那么我就告诉我的教授。是的,当我在Windows上测试它时,我猜它会返回空值,然而,它在OSX上工作。