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
如何在JPanel上画圆圈?Java 2D_Java_User Interface_Swing_Java 2d - Fatal编程技术网

如何在JPanel上画圆圈?Java 2D

如何在JPanel上画圆圈?Java 2D,java,user-interface,swing,java-2d,Java,User Interface,Swing,Java 2d,我有一个JPanel,我为它设置了一些图像作为背景。我需要在图片上方画一组圆圈。现在,圆将基于某个坐标x、y进行定位,大小将基于某个整数大小。这就是我的班级 import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import javax.swing.JPanel; class ImagePanel extends JPanel { private Image img; Circl

我有一个JPanel,我为它设置了一些图像作为背景。我需要在图片上方画一组圆圈。现在,圆将基于某个坐标x、y进行定位,大小将基于某个整数大小。这就是我的班级

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;

class ImagePanel extends JPanel {

    private Image img;
    CircleList cList;  //added this

    public ImagePanel(Image img) {
        this.img = img;
        Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
        setPreferredSize(size);
        setMinimumSize(size);
        setMaximumSize(size);
        setSize(size);
        setLayout(null);

        cList = new CircleList(); //added this
    }

    public void paintComponent(Graphics g) {
        g.drawImage(img, 0, 0, null);

        cList.draw(null); //added this
    }
}

我如何创建一些可以执行此操作的方法

最简单的方法是沿着这些线放置一些东西到
paintComponent
方法中

int x = ...;
int y = ...;
int radius = ...;
g.drawOval(x, y, radius, radius);

最简单的方法是沿着这些线放置一些东西到
paintComponent
方法中

int x = ...;
int y = ...;
int radius = ...;
g.drawOval(x, y, radius, radius);

您可能需要创建一个ArrayList来存储有关要绘制的圆的信息。然后,调用paintComponent()方法时,只需在ArrayList中循环并绘制圆


显示如何对矩形执行此操作。您也可以修改椭圆的代码。您可能会添加方法,以使用位置信息更新数组,而不是通过动态方式进行更新。

您可能需要创建一个ArrayList来存储有关要绘制的圆的信息。然后,调用paintComponent()方法时,只需在ArrayList中循环并绘制圆


显示如何对矩形执行此操作。您也可以修改椭圆的代码。您可能会添加方法,以使用位置信息更新数组,而不是动态地进行更新。

您的方法可以类似于此,即使用类
圆圈列表来保存所有圆圈和绘图例程:

class CircleList
{
  static class Circle
  {
    public float x, y, diameter;
  }

  ArrayList<Circle> circles;

  public CirclesList()
  {
    circles = new ArrayList<Circle>();
  }

  public void draw(Graphics2D g) // draw must be called by paintComponent of the panel
  {
    for (Circle c : circles)
      g.fillOval(c.x, c.y, c.diameter, c.diameter)
  }
}
类循环列表
{
静态类圈
{
公共浮子x,y,直径;
}
ArrayList圆;
公众圈名单()
{
圆圈=新的ArrayList();
}
public void draw(Graphics2D g)//绘图必须由面板的paintComponent调用
{
用于(圆c:圆)
g、 圆角椭圆(c.x、c.y、c.直径、c.直径)
}
}

您的方法可以类似于此,在这种方法中,您使用类
圆圈列表来保存所有圆圈和绘图例程:

class CircleList
{
  static class Circle
  {
    public float x, y, diameter;
  }

  ArrayList<Circle> circles;

  public CirclesList()
  {
    circles = new ArrayList<Circle>();
  }

  public void draw(Graphics2D g) // draw must be called by paintComponent of the panel
  {
    for (Circle c : circles)
      g.fillOval(c.x, c.y, c.diameter, c.diameter)
  }
}
类循环列表
{
静态类圈
{
公共浮子x,y,直径;
}
ArrayList圆;
公众圈名单()
{
圆圈=新的ArrayList();
}
public void draw(Graphics2D g)//绘图必须由面板的paintComponent调用
{
用于(圆c:圆)
g、 圆角椭圆(c.x、c.y、c.直径、c.直径)
}
}

你看过吗?这是一个很棒的库,允许您以一种明显的方式在任何GUI元素的顶部分层特殊的绘画。我相信它将包含在JDK7的主要java库中,您看过了吗?这是一个很棒的库,允许您以一种明显的方式在任何GUI元素的顶部分层特殊的绘画。我相信它将包含在JDK7的主要java库中

我刚刚看到Ellipse2D需要一个双精度或浮点值,我想我可以用双精度表示大小。我刚刚看到Ellipse2D需要一个双精度或浮点值,我想我可以用双精度表示大小。-1使用getGraphics()将不起作用。是的,它将绘制一次椭圆形,但一旦JAVA确定面板需要重新绘制,它就会被删除。自定义绘制是通过重写paintComponent()方法完成的。你在开玩笑吗?然后离开
getGraphics()
,将代码移到
paintComponent
方法中。@camickr。thx给你,虽然我基本上给出了与Jack相同的答案,但你给出了错误或误导性的信息。如果我没有对此发表评论,那么其他阅读该帖子的人可能会认为使用getGraphics()方法是一个很酷的想法。当新手必须问这样一个基本问题时,他们应该得到关于正确做事方式的信息。+1希望让你了解0,因为你编辑了答案,现在它提供了准确的提示。该死的是,在死板的帖子中更改东西。-1使用getGraphics()是行不通的。是的,它将绘制一次椭圆形,但一旦JAVA确定面板需要重新绘制,它就会被删除。自定义绘制是通过重写paintComponent()方法完成的。你在开玩笑吗?然后离开
getGraphics()
,将代码移到
paintComponent
方法中。@camickr。thx给你,虽然我基本上给出了与Jack相同的答案,但你给出了错误或误导性的信息。如果我没有对此发表评论,那么其他阅读该帖子的人可能会认为使用getGraphics()方法是一个很酷的想法。当新手必须问这样一个基本问题时,他们应该得到关于正确做事方式的信息。+1希望让你了解0,因为你编辑了答案,现在它提供了准确的提示。他妈的,是的,我在死帖中改变了东西。好吧,我创建了一个圆圈列表,在链表中有两个任意的圆圈。当我在ImagePanel类中调用circleList.draw(null)时,什么都没有发生。GUI实际上是冻结的。当我调用draw方法时,它的参数是什么?我在原始帖子中指出,我添加的Graphics2D就是其中之一。。与JPanel的paintComponent相同的图形组件。我习惯于将它转换为Graphics2D,因为它更强大。所以我创建了一个带有两个任意圆圈的圆圈列表。当我在ImagePanel类中调用circleList.draw(null)时,什么都没有发生。GUI实际上是冻结的。当我调用draw方法时,它的参数是什么?我在原始帖子中指出,我添加的Graphics2D就是其中之一。。与JPanel的paintComponent相同的图形组件。我总是习惯于将其转换为Graphics2D,因为它更强大。