Wie füge ich ein JFreeChart-Diagramm in ein Panel auf einer separaten Benutzeroberfläche ein?

Ich möchte mithilfe von JFreeChart ein Diagramm in ein bestimmtes Bedienfeld in einer GUI einfügen. Ich habe 2 Java-Dateien (eine mit der GUI und eine andere, die das Diagramm erstellt) und möchte, wenn möglich, diese beibehalten.

In der Haupt-GUI habe ich ein Panel namens panelGraph:

    JPanel panelGraph = new JPanel();
    panelGraph.setBounds(220, 64, 329, 250);
    panelMain.add(panelGraph); //it is inside the main panel
    panelGraph.setLayout(null);

Und ich habe auch eine Schaltfläche, die das Erscheinen des Graphen auslöst:

    Button btnGetGraph = new JButton("Draw Graph");
    btnGetGraph.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {

            XYLineChart_AWT.runGraph("Cenas", "Titulo", "XLABEL", "YLABEL", panelGraph);

        }
    });
    btnGetGraph.setFont(new Font("Tahoma", Font.BOLD, 13));
    btnGetGraph.setBounds(323, 327, 128, 34);
    panelMain.add(btnGetGraph);

Und wie folgt ist die Java-Datei, die das Diagramm erstellt:

  public class XYLineChart_AWT extends JFrame {
  public XYLineChart_AWT( String applicationTitle, String chartTitle, String xLabel, String yLabel, JPanel panel) {

  JFreeChart xylineChart = ChartFactory.createXYLineChart(
     chartTitle ,
     xLabel ,
     yLabel ,
     createDataset() ,
     PlotOrientation.VERTICAL ,
     true , false , false);

  ChartPanel chartPanel = new ChartPanel( xylineChart );
  chartPanel.setPreferredSize( panel.getSize() );


  final XYPlot plot = xylineChart.getXYPlot( );
  plot.setBackgroundPaint(new Color(240, 240, 240));
  XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true,false);
  renderer.setSeriesPaint( 0 , Color.BLACK );
  renderer.setSeriesStroke( 0 , new BasicStroke( 4.0f ) );
  plot.setRenderer( renderer );
  setContentPane(chartPanel);
  panel.add(chartPanel);
  }

private XYDataset createDataset( ){

  final XYSeries seno = new XYSeries ("Sin");
  for(double i=0;i<=1440;i++){
      double temp=Math.sin(i*((2*Math.PI)/640) + Math.PI) + 1;
      seno.add(i/60, temp);
  }


  final XYSeriesCollection dataset = new XYSeriesCollection( );          
  dataset.addSeries(seno);
  return dataset;
}

public static void runGraph(String appTitle, String chartTitle, String xLabel, String yLabel, JPanel panel) {
  XYLineChart_AWT chart = new XYLineChart_AWT(appTitle, chartTitle, xLabel, yLabel, panel);

  chart.pack();
  chart.setVisible(true);
  panel.setVisible(true);

 }
}

Dies erstellt das Diagramm und fügt es in das angegebene Feld ein (das ich über die Methode runGraph () sende). Es wird jedoch ein zweiter JFrame erstellt (ich weiß, dass ich chart.setVisible (true) erstellt habe, und ich kann ihn einfach auf false setzen), der nicht außerhalb des von mir gesendeten Panels erstellt werden soll.

Ist es eine Möglichkeit, dies zu implementieren, die diesen zusätzlichen jFrame nicht erstellt?

P.S .: Eine andere Frage: Die setBackgroundPaint () -Methode ändert die Rückseite der Grafik. Die Teile, in denen sich Titel und Legende befinden, ändern sich jedoch nicht. Wie kann ich diese Teile ändern?

Danke für deine Hilfe

Nhekas

Antworten auf die Frage(2)

Ihre Antwort auf die Frage