如何在JPanel上画圆圈?Java 2D
我有一个JPanel,我为它设置了一些图像作为背景。我需要在图片上方画一组圆圈。现在,圆将基于某个坐标x、y进行定位,大小将基于某个整数大小。这就是我的班级如何在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
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,因为它更强大。