Gebaute Klasse zum Erstellen eines JFreeCharts. Wie füge ich sie einem JPanel in meiner Hauptschnittstelle hinzu?
Ich bin gerade auf JFreeChart gestoßen und probiere es für mein Projekt aus ... Ich habe eine Klasse mit dem Namen "CountryVsCountryChart" erstellt, die ich verwenden möchte, um ein neues Diagramm gemäß den durchgereihten Optionen zu erstellen. Ich möchte wissen, wie ich ein Objekt dieser Klasse zu einem JPanel in meiner Hauptschnittstelle hinzufügen kann. Ich möchte in der Lage sein, dies durch Auswahl einer Option in einer JComboBox zu tun, aber ich denke, ich wäre in der Lage, damit umzugehen ...
Hier ist der Code für die Klasse (abzüglich der entsprechenden Importanweisungen):
public class CountryVsCountryChart extends JPanel
{
private static final long serialVersionUID = 1L;
private ArrayList<Player> players;
private StatUtilities stats;
public CountryVsCountryChart(String applicationTitle, String chartTitle, ArrayList<Player> players, int option) {
//super(applicationTitle);
this.players = players;
stats = new StatUtilities();
// This will create the dataset
PieDataset dataset = createDataset(option);
// based on the dataset we create the chart
JFreeChart chart = createChart(dataset, chartTitle);
// we put the chart into a panel
ChartPanel chartPanel = new ChartPanel(chart);
// default size
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
}
/** * Creates a sample dataset */
private PieDataset createDataset(int graphDisplayOption) {
ArrayList<String> countries = new ArrayList<String>();
for (Player p : players) {
countries.add(p.getCountryName());
}
//Get unique country names
Set<String> countryNames = new HashSet<String>(countries);
DefaultPieDataset result = new DefaultPieDataset();
/*
* The below code block uses a switch statement to determine
* which type of stats to display in the graph (country by country).
*
* Options for the switch statement are as follows:
*
* 1 = Average Balls Bowled
* 2 = Average of Bowling Averages
* 3 = Average Career Lengths
* 4 = Average Economy Rates
* 5 = Average Number of 5 Wicket Innings
* 6 = Average Innings Played
* 7 = Average Matches Played
* 8 = Average Runs Conceded
* 9 = Average Strike Rates
* 10 = Average WicketsTaken
*/
for(String c: countryNames)
{
switch(graphDisplayOption)
{
case 1:
result.setValue(c, stats.aveBallsBowled(players, c));
break;
case 2:
result.setValue(c, stats.aveBowlingAverage(players, c));
break;
case 3:
result.setValue(c, stats.aveCareerLength(players, c));
break;
case 4:
result.setValue(c, stats.aveEconRate(players, c));
break;
case 5:
result.setValue(c, stats.aveFiveWicketsInns(players, c));
break;
case 6:
result.setValue(c, stats.aveInningsPerCountry(players, c));
break;
case 7:
result.setValue(c, stats.aveMatchesPerPlayer(players, c));
break;
case 8:
result.setValue(c, stats.aveRunsConceded(players, c));
break;
case 9:
result.setValue(c, stats.aveStrikeRate(players, c));
break;
case 10:
result.setValue(c, stats.aveWickets(players, c));
break;
}
}
return result;
}
/** * Creates a chart */
private JFreeChart createChart(PieDataset dataset, String title) {
JFreeChart chart = ChartFactory.createPieChart3D(
title, // chart title
dataset, // data
true, // include legend
true,
false
);
PiePlot3D plot = (PiePlot3D) chart.getPlot();
plot.setStartAngle(290);
plot.setDirection(Rotation.CLOCKWISE);
plot.setForegroundAlpha(0.5f);
return chart;
}
}
Der nächste Code ist für einen Button-Listener - für einen Button, auf den ich klicke, um das Diagramm im Jpanel anzuzeigen. Momentan sind es nur zwei Codezeilen zu Testzwecken. Der Code befindet sich in meiner Hauptschnittstellenklasse mit dem Namen "AppInterface":
private void comparePlayerStatsBtnActionPerformed(java.awt.event.ActionEvent evt) {
/*
* Include below information in a loop to generate chart, based on option selected.
*/
CountryVsCountryChart chart = new CountryVsCountryChart("Test Chart", "A Test Chart", players, 1);
/**/
graphDisplayPanel.add(chart);
}
Ich bin mir auch nicht sicher, ob dies helfen wird, aber hier ist ein Screenshot des Teils meiner Benutzeroberfläche, auf den ich mich beziehe. In der weißen Leiste soll das Diagramm angezeigt werden. Die JComboBox enthält zahlreiche Optionen für die Anzeige des Diagramms (Erstellen). Die Schaltfläche ist selbsterklärend.
Was das Posten von SSCCEs angeht, war ich mir nicht sicher, ob ich die gesamte Chartklasse einbeziehen sollte oder nicht. Da ich neu in JFreeChart bin, dachte ich, dass jemand möglicherweise die gesamte Klasse analysieren muss - da die Struktur möglicherweise (auch) ein Problem darstellt. Wenn Sie das Projekt ausführen möchten, können Sie es von GitHub hier klonen -https://github.com/rattfieldnz/Java_Projects/tree/master/PCricketStats.