gpt4 book ai didi

java - 向 JFrame 添加多个圆圈? ( java )

转载 作者:行者123 更新时间:2023-11-30 06:36:44 25 4
gpt4 key购买 nike

我正在尝试在 JFrame 上绘制具有不同位置的圆圈,在本例中以网格状图案绘制。

我似乎在绘制具有 x,y 位置的单个圆圈时没有遇到问题,但是,当我尝试绘制具有不同位置的多个圆圈时,其他圆圈的位置会变得模糊。

在下面的代码中,我有两个数组:XPlacements 和 YPlacements,它们包含不同的 X 和 Y 位置以形成网格。对于每个 X 位置,应该在该 X 位置处创建具有不同 Y 位置的圆(反之亦然)。

当我只让下面的代码绘制一个圆圈时,其中 XPlacements = {10} YPlacements = {100},它会绘制一个看起来距离左上角约 (10,100) 的圆圈。同样,当我添加多个 X 位置但添加一个 Y 位置时,似乎没有任何内容被遮挡。然而,当我添加多个 Y 位置时,每一行下降的圆圈似乎都越来越向右推。当我运行它时,它会像这样模糊:http://imgur.com/HHjhvPD

我似乎无法通过更改 JFrame 的值来使其不那么模糊。我能找到的所有 JFrame 圆教程都只处理 1 个圆,当我使用 1 个圆(或仅 1 行圆)时,我没有任何问题

有谁知道为什么下面的代码没有生成类似网格的图案?

谢谢。

public class Circle extends Canvas {
int XPos;
int YPos;
public void SetPosition(int x, int y) {
this.XPos = x;
this.YPos = y;
repaint();
}
public void paint(Graphics g) {
System.out.println("Filling oval with position ("+XPos+","+YPos+")");
g.fillOval(XPos, YPos, 15, 15);
}
}

public class MainFile extends JFrame {
static int[] XPlacements = {10,20,30};
static int[] YPlacements = {100,200,300};
static Circle[] Circles = new Circle[1000];
static int Circle_Count = 0;

public static void main(String[] args) {
JFrame frame = new JFrame("Grid of circles");
frame.setLayout(new GridLayout(1,1));
frame.setSize(800, 800);

for(int x=0;x<XPlacements.length;x++) {
for(int y=0;y<YPlacements.length;y++) {
System.out.println("Creating new circle "+Circle_Count+" with position "+XPlacements[x]+","+YPlacements[y]);
Circles[Circle_Count] = new Circle();
Circles[Circle_Count].SetPosition(XPlacements[x],YPlacements[y]);
frame.add(Circles[Circle_Count]);
Circle_Count++;
}
}
frame.setVisible(true);
}
}

最佳答案

首先,这是一个 Swing 应用程序,因此应该通过重写 JPanel 的 PaintComponent() 来完成自定义绘制。 Canvas 是一个 AWT 组件,不应在 Swing 应用程序中使用。

如果您想在组件上绘制,则自定义绘制始终相对于偏移量 (0, 0) 进行。因此,在您的情况下,代码将是:

//g.fillOval(XPos, YPos, 15, 15);
g.fillOval(0, 0, 15, 15);

然后你需要重写类的 getPreferredSize() 方法来设置组件的大小:

@Override
public Dimension getPreferredSize()
{
return new Dimension(15, 15);
}

阅读 Swing 教程中关于 Custom Painting 的部分了解更多信息和工作示例。

现在布局管理器有了有关组件的信息,并且可以在面板上定位每个组件:

因此,将圆圈添加到框架的代码将类似于:

frame.setLayout( new GridLayout(3, 3, 50, 50) );

for (int i = 0; i < 9; i++)
{
frame.add( new Circle() );
}

这将创建一个 3x3 网格,每个组件之间的间隙为 50 像素。

关于java - 向 JFrame 添加多个圆圈? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45085710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com