我正在尝试创建一个图形圆计算器程序,允许用户输入圆的直径,结果输出显示框架中圆的表示以及半径、周长和直径。我使用 System.out.println() 命令来确保值被接受、计算和存储。但是,我无法让框架/组件从这些相同的变量中提取值,导致椭圆大小为 0x0,并且所有数据都表示为 0.0。
如果您能提供任何帮助,我们将不胜感激。程序代码如下。
package javaconcepts;
import java.awt.*;
import java.awt.geom.*;
import java.util.Scanner;
import javax.swing.*;
public class CircleComponent extends JComponent
{
private String input;
private float value;
private float radius;
private float circ;
private float area;
private static final long serialVersionUID = 1L;
public CircleComponent()
{
}
public void circleCalcValues()
{
System.out.println("Welcome to the Circle Graphical Calculator.");
System.out.println();
while(true)
{
System.out.print("Please enter the diameter's value (in pixels): ");
Scanner in = new Scanner(System.in);
input = in.next();
if(input.equals("done"))
{
System.out.println();
break;
}
value = (Float.valueOf(input));
System.out.println(value);
calculate();
System.out.println(radius + ", " + circ + ", " + area);
draw();
System.out.println();
System.out.println("Results are available in window.");
System.out.println();
}
System.out.println("OK.");
System.exit(0);
}
private void calculate()
{
radius = (value / 2);
circ = (float)(value * Math.PI);
area = (float)(Math.PI * Math.pow(value, 2));
}
private void draw()
{
JFrame frame = new JFrame();
frame.setSize(640, 480);
frame.setTitle("Circle Graphical Calculator: Result");
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
CircleComponent component = new CircleComponent();
frame.add(component);
frame.setVisible(true);
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
Ellipse2D.Float output = new Ellipse2D.Float(100, 100, value, value);
g2.setColor(Color.BLACK);
g2.draw(output);
g2.setPaint(Color.WHITE);
g2.fill(output);
g2.setColor(Color.BLACK);
g2.drawString("Diameter: " + value + ", Radius: " + radius + ", Circumference: " + circ + ", Area: " + area, 50, 50);
}
}
最佳答案
您混合用户输入范例(控制台和 GUI)并阻止事件调度线程,这将阻止 Swing 绘制任何内容。
基本上,GUI 是一个事件驱动的环境。发生某些事情(按下按键、单击鼠标)并且您的代码对其做出响应。这通常是通过使用“监听器”来实现的,“监听器”会在发生变化时通知您。
GUI 环境中的用户输入是使用 GUI 控件完成的。看看Creating a GUI with Swing .
基本上,您想要设置一个字段,例如用户可以在其中输入值的JTextField
或JSpinner
或JFormattedField
,并且可能是一个JButton
或其他监听器,以便它们可以“应用”该值,以便您可以绘制它...
虽然有点先进,Painting in AWT and Swing可能会给您一些线索,说明为什么您当前的方法不起作用
关于java - Graphics2D 不会从类变量中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19992594/