2016-03-26 4 views
1

Я попытался отобразить JFreeChart внутри JDialog, и он отображается правильно, но когда я попытался отобразить его в модальном JDialog, это не dispaying.Following программа не отображает график JFreeChart, пока я не прокомментирую строку # 31. В чем причина ?JFreeChart не отображается в модальном JDialog?

import java.awt.BorderLayout; 
import java.awt.Dialog; 
import java.awt.Dimension; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.chart.plot.XYPlot; 
import org.jfree.data.xy.XYDataset; 
import org.jfree.data.xy.XYSeries; 
import org.jfree.data.xy.XYSeriesCollection; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
public class GraphExample extends JDialog{ 
    private final JPanel contentPanel = new JPanel(new BorderLayout()); 
    /** 
    * Launch the application. 
    */ 
public static void main(String[] args) { 
     try { 
      GraphExample graph=new GraphExample(new JFrame(),"Testing"); 
      graph.createGraphPanel(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
public GraphExample(JFrame parent,String title) { 
     super(parent,title); 
     setPreferredSize(new Dimension(500, 500)); 
     this.setModal(true); 
     getContentPane().setLayout(new BorderLayout()); 
     getContentPane().add(contentPanel, BorderLayout.CENTER); 
     setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 
public void createGraphPanel(){ 
     XYSeriesCollection dataset = new XYSeriesCollection(); 
     XYSeries series1= new XYSeries("First"); 
     series1.add(1.0, 1.0); 
     series1.add(2.0, 4.0); 
     series1.add(3.0, 3.0); 
     series1.add(4.0, 5.0); 
     series1.add(5.0, 5.0); 
     series1.add(6.0, 7.0); 
     series1.add(7.0, 7.0); 
     series1.add(8.0, 8.0); 
     dataset.addSeries(series1); 
     final JFreeChart chart = createChart(dataset);//,xLabel,yLabel,title,seriesesVector,check); 
     final ChartPanel chartPanel = new ChartPanel(chart); 
     chartPanel.setPreferredSize(new Dimension(400,400));//width height 
     contentPanel.add(chartPanel,BorderLayout.CENTER); 
     contentPanel.revalidate(); 
    } 
private JFreeChart createChart(final XYDataset dataset){//, String xLabel, String yLabel, String title,Vector seriesesVector,String check) { 
    final JFreeChart result = ChartFactory.createXYLineChart(//createXYAreaChart(//also comment line#218 219 220 also uncomment line#250 
      null, 
      "X", 
      "Y", 
      dataset, 
      PlotOrientation.VERTICAL, 
      true, 
      true, 
      false 
      ); 
    result.setTitle("Example"); 
    final XYPlot plot = result.getXYPlot();//domain is x and range is y 
    plot.setDomainGridlinesVisible(false); 
    plot.setRangeGridlinesVisible(false); 
    return result; 
} 
    } 

Как показать JFreeChart в модальном JDialog?

+0

вы пробовали 'перекрасить()' 'после перепроверки()' –

ответ

1

Не звоните setVisible(true) на JDialog до все настроено. Фактически, получите его из конструктора и назовите его самим в коде, который объявляет и конструирует JDialog и только после того, как все сделано. Поймите, что поток кода будет заблокирован, когда он будет вызван, и поэтому его должен называться.

Так это изменить:

public GraphExample(JFrame parent,String title) { 
    super(parent,title); 
    setPreferredSize(new Dimension(500, 500)); 
    this.setModal(true); 
    getContentPane().setLayout(new BorderLayout()); 
    getContentPane().add(contentPanel, BorderLayout.CENTER); 
    setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
    pack(); 
    setVisible(true); 
} 

к этому:

public GraphExample(JFrame parent,String title) { 
    super(parent,title); 
    setPreferredSize(new Dimension(500, 500)); 
    this.setModal(true); 
    getContentPane().setLayout(new BorderLayout()); 
    getContentPane().add(contentPanel, BorderLayout.CENTER); 
    setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
    pack(); 
    // setVisible(true); // **** **** **** **** 
} 

и это:

public static void main(String[] args) { 
    try { 
     GraphExample graph=new GraphExample(new JFrame(),"Testing"); 
     graph.createGraphPanel(); 
     graph.setVisible(true); // ****** add ***** 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

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

  • Нет связанных вопросов^_^