链表问题(Java小程序)
在这段代码中,我试图初始化一个椭圆形链表,这些椭圆形链表被发送到一个要绘制的类链表问题(Java小程序),java,applet,Java,Applet,在这段代码中,我试图初始化一个椭圆形链表,这些椭圆形链表被发送到一个要绘制的类 public void actionPerformed(ActionEvent e) { oval p; Graphics g = this.getGraphics(); int x, y, height, width, fill; ListIterator li; LinkedList<oval> list = new LinkedList<oval&g
public void actionPerformed(ActionEvent e)
{
oval p;
Graphics g = this.getGraphics();
int x, y, height, width, fill;
ListIterator li;
LinkedList<oval> list = new LinkedList<oval>();
li = list.listIterator();
x = Integer.parseInt(xfield.getText());
y = Integer.parseInt(yfield.getText());
height = Integer.parseInt(heightf.getText());
width = Integer.parseInt(widthf.getText());
list.add(new oval(x,y,height,width));
repaint();
while (li.hasNext())
{
p = (oval)li.next();
p.draw(g);
}
我怎样才能解决这个问题?(第97行是p=(椭圆形)li.next();如果有帮助的话。)在更改列表的状态之前,先获得列表的迭代器,然后使用迭代器进行迭代,但现在迭代器不再合适。解决方案:改变顺序。在将项目添加到列表后,仅获取迭代器,或者使用ListIterator并使用ListIterator添加项目
其他问题:您的绘图不正确,因为您不应该通过调用组件上的
getGraphics()
来获取图形对象,因为这会返回一个短期对象。为了理解我的意思,一旦你让你的图形用户界面工作,最小化,然后在完成这个绘图后恢复它,看着你的绘图消失。使用LinkedList字段,在actionPerformed方法中更改其状态,调用repaint()
,并让组件的paintComponent(Graphics g)
方法(或paint(Graphics g)
方法,如果这是AWT程序)为您绘制图形。您可以通过使用remove()而不是调用next()来消除此问题当对象被其他任务使用时,您不希望访问该对象,这意味着没有并发访问
while (li.hasNext())
{
p = (oval)li.remove();
p.draw(g);
}
在将任何椭圆添加到链接列表之前,您将创建列表迭代器。但是,当一个新项目添加到链表中时,迭代器不会更新。这就是为什么会发生异常。若要修复此问题,请在添加新椭圆后初始化列表迭代器。谢谢。我试着只用图形g;而不是图形g=this.getGraphics();但是它给了我一个错误,说“局部变量g可能还没有初始化”。@Bryan:请重新阅读我的建议。绘图应在
paint(…)
(如果是AWT)或paintComponent(…)
方法(如果是Swing)中完成,使用JVM提供给该方法的图形参数。为什么要编写小程序?如果是老师指定的,请参考他们。
while (li.hasNext())
{
p = (oval)li.remove();
p.draw(g);
}