Проблема с апплетом, когда окно браузера было свернуто или изменено - PullRequest
0 голосов
/ 04 августа 2010

Я сделал апплет с несколькими панелями на нем. Я рисую что-то на панели с помощью специальных методов, которые я создал, они используют графический объект для рисования.
Для рисования я использую такие команды, как:

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);

}

Ответы [ 3 ]

0 голосов
/ 04 августа 2010

При изменении размера апплета изображение очищается и вызывается метод paint для его перекраски.В настоящее время метод рисования по умолчанию не знает об изменениях, которые вы вносите в отображение с paintNode.

. Правильный способ сделать это - сохранить список объектов, которые нужно нарисовать, включаялюбая соответствующая информация, такая как местоположение, цвет и т. д. Когда пользователь добавляет / удаляет / изменяет что-либо, список изменяется и вызывается repaint().Затем код рисования должен пройтись по списку и нарисовать фигуры, текст и т. Д. На дисплее.

0 голосов
/ 05 августа 2010

хорошо ... что это может быть за список? Могу ли я нарисовать все на изображении, а затем перерисовать изображение? Все, что я рисую, нарисовано на графическом объекте gr, не могу ли я как-то перерисовать этот объект gr в метод рисования?

0 голосов
/ 04 августа 2010

Вам нужно вызвать методы update () / repaint () на Panel, когда окно свернуто и развернуто.

Вам необходимо переопределить метод апплета start () и добавить к нему repaint (). Определение для начала ():

public void start (): Это вызывается после события "init". Он также вызывается иногда, когда пользователь не использует ваш апплет и начинает использовать его снова, например, когда развернут свернутый браузер, содержащий ваш апплет.

Вот как должен выглядеть ваш код:

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...