2014-02-04 2 views
1

Я построил дисплей TabPanel. На этом этапе диаграмма не отображается. Когда я нажимаю кнопку, я создаю новую диаграмму, добавляя ее в панель. Но ничего не происходит. Я должен щелкнуть по панели, чтобы наконец отобразить диаграмму.JfreeChart не отображается перед нажатием

Таким образом, я помещаю repaint() на TabPanel, который содержит ChartPanel, но без эффекта. Я что-то упустил?

 if(myChart==null){ 
      myChart = new PortfolioChart(portfolioModel.getDataMatrix()); 
      add(myChart.createPanel(), BorderLayout.CENTER); 
      repaint(); 
     }else{ 
      myChart.setPortfolio(portfolioModel.getDataMatrix()); 
      myChart.updateDataSet(); 

     } 

Может быть, я должен поместить инструкцию repaint() на что-то другое?

+0

Иногда недействительными(); перекрасить(); работает. Также попробуйте вызвать эти методы в ChartPanel, если он все еще не работает. –

+0

Также дважды проверьте, выполняете ли вы это из EDT. – rlegendi

+0

К сожалению, это все еще не работает для меня. – user3239711

ответ

1

В приведенном полном примере here каждая вкладка имеет ChartPanel. Вместо , заменяя диаграмму, каждая модель данных диаграммы периодически обновлялась, а диаграмма прослушивания копирует себя в ответ.

image

+0

Моя конструкция почти такая же, как у вас ... но я добавляю только диаграмму, когда кнопка нажата. В вашем алгоритме все диаграммы создаются перед командой Pack(). Вероятно, проблема. – user3239711

+0

Кнопка «Добавить» добавляет новую диаграмму после 'pack()' при нажатии кнопки; вам не нужно «revalidate()». – trashgod

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