我有一个我一直在工作的程序:它从用户那里获取数据用它做一些数学然后在屏幕上显示一个椭圆,当输入新数据时,旧的椭圆消失而新的椭圆替换它。但是我需要程序来保持屏幕上的旧椭圆以及新的椭圆,以便我可以比较尺寸。我的解决方案就是让它在创建椭圆时存储在一个数组中,然后将椭圆数组绘制到屏幕上,我也需要它,以便用户可以清除数组并重新开始。但是我无法让代码工作。你能帮忙吗?
下面是我用来创建和绘制椭圆的代码,所有使用的变量都只是数字。
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(Color.white);
g2.draw(new Ellipse2D.Double(((Background.getWidth()) / 2) - (gblSemiMajaxis / 2), ((Background.getHeight()) / 2) - (gblsemiMinoraxis / 2), gblSemiMajaxis, gblsemiMinoraxis));
}
答案 0 :(得分:1)
只是为了扩展Ian McLarid的回答:
// imports
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;
...
ArrayList<Ellipse2D> ellipseList = new ArrayList<Ellipse2D>();
public void createEllipse(double gblSemiMajaxis, double gblSemiMinoraxis) {
Ellipse2D e = new Ellipse2D.Double(((Background.getWidth()) / 2) - (gblSemiMajaxis / 2), ((Background.getHeight()) / 2) - (gblSemiMinoraxis / 2), gblSemiMajaxis, gblSemiMinoraxis);
ellipseList.add(e);
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(Color.white);
for (Ellipse2D e : ellipseList) {
g2.draw(e);
}
}
答案 1 :(得分:0)
我建议给你的类一个ArrayList<Ellipse2D>
类型的成员变量。当用户输入输入时,创建Ellipse2D并将其添加到列表中。在您的绘图功能中,您可以遍历列表并绘制您已经创建的每个椭圆。当用户想要清除所有省略号时,您可以使用ArrayList的clear()
方法。