我制作了一个带有一些面板的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);
}
答案 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)