gpt4 book ai didi

java - 尝试使用参数中的变量在Java中画一个圆

转载 作者:行者123 更新时间:2023-11-29 07:54:37 26 4
gpt4 key购买 nike

我在做一个相当简单的任务时遇到了麻烦,即获取圆的直径然后绘制它。到目前为止,这是我的代码。

import javax.swing.*;
import java.awt.Graphics;

public class Shapes extends JFrame
{
double diameter;

public Shapes()
{
setSize(600,600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}


public void getDiameter()
{
String input = JOptionPane.showInputDialog("What is the diameter of the circle?");
diameter = Double.parseDouble(input);

Shapes gui = new Shapes();
gui.setVisible(true);
}

public static void main(String[] args)
{
Shapes app = new Shapes();
app.getDiameter();
}

public void paint(Graphics canvas)
{
canvas.drawOval(50, 50, (int)diameter, (int)diameter);
}

}

当我运行它时,它打开了 Jframe 窗口,但没有绘制任何东西,所以我猜测直径的值从未传递给 paint 方法。有人可以帮我解决这个问题吗?谢谢。

最佳答案

您的程序实际上正在创建两个 Shapes 对象,其中一个的直径字段设置正确但未显示,另一个保留直径的默认值 0 并显示。

建议:

  1. 不要直接在 JFrame 中绘制,而是在 JFrame 中保存并显示的 JPanel 的 paintComponent(Graphics g) 方法覆盖中绘制。这有很多原因,但其中一个原因是,由于 paint(...) 方法不仅负责绘制组件,还负责绘制组件的边框和子组件,这将防止您在以下情况下引起问题paint(...) 尝试绘制 GUI 的子项和边框。鉴于 Swing 组件默认使用双缓冲,它还将帮助您的动画(您肯定很快就会这样做)变得流畅。
  2. 始终在 JPanel 的 paintComponent 覆盖中调用 super.paintComponent(g) 方法。这将允许 Swing 删除需要删除的图像。
  3. 不要创建两个 Shapes 对象,而是只创建一个。这将大大简化事情,并允许您设置唯一重要对象的直径值。
  4. 更改直径字段的值后,在您的 GUI 上调用重绘,以便调用显示的 JPanel 的 paintComponent。

关于java - 尝试使用参数中的变量在Java中画一个圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18721612/

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