【问题标题】:Problem with Applet when the browser window got minimzed or resized当浏览器窗口最小化或调整大小时,Apple 出现问题
【发布时间】:2011-03-25 08:30:52
【问题描述】:

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

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

然后我从小程序类中调用这些方法。
我的问题如下:在我最小化或调整浏览器窗口大小后,面板没有
显示任何东西,我想是因为我没有在面板的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);

}

【问题讨论】:

    标签: java applet


    【解决方案1】:

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

    您将需要覆盖小程序的 start() 方法并将 repaint() 添加到它。 start() 的定义:

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

    你的代码应该是这样的:

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

    希望这会有所帮助。

    【讨论】:

    • 我该怎么做?你的意思是我必须覆盖面板类中的 repaint() 方法吗?
    • 只要调用它。如果您需要添加 Windows litener,请将此调用添加到为最小化最大化事件调用的方法中。
    • 对不起,我真的明白,我对 java 比较陌生。在我的面板类中,我必须在哪里调用它?以及如何调用它?我的paint() 是空的,面板绘制的任何东西都是按照我描述的方法完成的......
    • @john 在paint 方法中绘制组件。
    • 它不仅是一个组件,而且根据用户的操作向面板中添加了许多新的东西,所以我这样实现它:如果用户想要画一个圆圈,我从小程序调用面板方法 paintACircle(Ex,Ey) 其中 Ex = Ex 和 Ey = Ey(用户点击的坐标)。有很多方法,我想我不能把它们放在我的paint()中......
    【解决方案2】:

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

    这样做的正确方法是保留要绘制的对象的列表,包括任何相关信息,如位置、颜色等。当用户添加/删除/更改某些内容时,列表会更改并且repaint()叫做。然后绘制代码需要遍历列表并将形状、文本等绘制到显示器上。

    【讨论】:

      【解决方案3】:

      好的...该列表可能是什么?我可以将所有内容也绘制到图像上,然后以某种方式重新绘制图像吗?我绘制的所有内容都绘制在图形对象 gr 上,我不能以某种方式重新绘制该对象 gr画法?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-07
        • 2012-02-23
        • 2012-05-20
        • 2015-04-20
        • 1970-01-01
        • 2013-09-02
        • 2015-07-24
        • 1970-01-01
        相关资源
        最近更新 更多