浏览器窗口最小化或调整大小时Apple的问题

时间:2010-08-04 15:52:31

标签: java applet

我制作了一个带有一些面板的Applet。 我使用我创建的特定方法在面板上绘制了一些东西,它们使用图形对象进行绘制 要绘制我使用如下命令:

gr = this.getGraphics;  
gr.drawString... etc  

然后我从applet类中调用这些方法 我的问题如下:在我最小化或调整浏览器窗口大小后,面板不会 显示任何内容,我想这是因为我没有在面板的paint()方法中实现任何内容 有没有办法解决这个问题而不改变我的所有方法?

我的一些方法是这样的:

//paint a node with coords x,y and nodeNumber in the center of the node
public void paintNode(int x,int y,Integer numberOfNode){

    gr = this.getGraphics();
    gr.setColor(ShowGUI.getPanelColor());
    gr.fillOval(x,y,40,40);
    gr.setColor(Color.BLACK);
    gr.drawOval(x,y,40,40);
    gr.drawString(numberOfNode.toString(),x+17,y+25);

}

//marks red the processing edge
public void markEdge(int x1,int y1,int x2,int y2,Integer numberOfNode1,Integer numberOfNode2,int weight){

    gr.setColor(Color.red);
    this.paintEdge(x1,y1,x2,y2,numberOfNode1,numberOfNode2,weight);
    this.paintNode(x1, y1, numberOfNode1);
    this.paintNode(x2, y2, numberOfNode2);

}

3 个答案:

答案 0 :(得分:0)

当窗口最小化并最大化时,您需要在Panel上调用update()/ repaint()方法。

您需要覆盖applet的start()方法并向其添加repaint()。 start()的定义:

public void start(): 这是在“init”事件之后调用的。当用户没有使用您的applet并再次开始使用它时,例如当包含您的applet的最小化浏览器被最大化时,也会调用它。

以下是代码的外观:

public void start(){
    super.start();
    this.repaint();
}

希望这有帮助。

答案 1 :(得分:0)

调整applet大小时,图像被清除,并调用paint方法重新绘制它。 目前,默认的绘制方法不知道您从paintNode对显示所做的更改。

执行此操作的正确方法是保留要绘制的对象列表,包括位置,颜色等任何相关信息。当用户添加/删除/更改某些内容时,列表会更改并{{1 }} 叫做。然后,绘画代码需要遍历列表并将形状,文本等绘制到显示中。

答案 2 :(得分:0)

好吧......这个列表可能是什么?我可以将所有内容都绘制成图像,然后以某种方式重新绘制图像吗?我绘制的所有内容都是在图形对象gr上绘制的,我无法以某种方式重新绘制对象gr涂料方法?