2009-11-22 2 views
0

Рассмотрим этот код:Почему событие PaintComponent в Java происходит каждый раз, когда я использую его графическое событие?

public class StateChartPanel extends JPanel { 
    private LightContext LC; 

    public StateChartPanel(LightContext lc){ 
     LC=lc; 
    } 
    public void paintComponent(Graphics G){   
     super.paintComponent(G); 
     LC.DrawStateChart((Graphics2D)G);  
    } 
} 

StateChartPanel представляет собой панель, чтобы нарисовать что-то (состояние диаграммы). Он отправляет объект Graphics в LC, который использует его для рисования фигур, но всякий раз, когда он рисует что-то, событие PaintComponent StateChartPanel происходит снова, и это заставляет мое приложение зависать.

+0

Можете ли вы опубликовать код для DrawStateChart –

ответ

0

Я думаю, что, вероятно, происходит бесконечный цикл: StateChartPanel.paintComponent вызывает LC.DrawStateChart, который затем вызывает StateChartPanel.paintComponent. Вероятно, у вас есть StateChartPanel как подкомпонент LC, а LC.DrawStateChart вызывает свою собственную функцию paint(). Попробуйте удалить вызов StateChartPanel.paintComponent в LC.DrawStateChart и посмотреть, работает ли это.

-1

Пожалуйста, изучите правильные соглашения о назначении Java. Все соглашения обычно выполняются в текстовых книгах, учебниках или кодах, которые мы публикуем на форумах. Так вслед за ними и не составляет свои собственные:

а) имена переменных не должен начинаться с верхним регистром символом

б) имена методов не должны начинаться с верхним регистром символами

Если у вас являются циклическими, а затем, вероятно, потому, что вы вызываете repaint() где-то в своем невидимом коде, который вы не публиковали.

Если вам нужна дополнительная помощь, разместите свой SSCCE, что указывает на проблему.

+0

, хотя то, что вы сказали, больше, чем правда (действительно, изучите некоторые соглашения), я думаю, что это относится к комментарию, а не как ответ ... –

+1

Я отвечал, что код был, вероятно, используя repaint(), но это было просто предположение, поскольку мы не можем видеть код. Затем я включаю ссылку о том, как отправить правильный код с вопросом. Я использовал это как ответ, так как не знаю, как включить ссылки в комментарий. Я также дал бонусные предложения для написания лучшего кода. Я не знаю, как добавить форматирование в комментарий, чтобы две точки выходили как одна строка. Наверное, я мог бы добавить два комментария, но я не думал, что это сработает. Я должен получить бонусные баллы :) Извините за смешение «ответа» и «предложения» в том же месте – camickr

+1

Ну, мой ответ по-прежнему намного лучше чем любой ответ, предоставленный вторым анонимным человеком. Почему вы не пытаетесь предоставить какую-либо полезную информацию для публикации? – camickr

Смежные вопросы