Ceci est similaire à une question que j'ai posée hier mais plus spécifique au problème. Quelle est la méthode correcte pour ajouter un JFreeChart à un projet NetBeans qui contient déjà divers widgets? Mon updateChart() masque le JFrame entier. Je voudrais ajouter le JFreeChart au JFrame.Comment afficher un JFreeChart dans un projet NetBeans
public class MyClass extends javax.swing.JFrame implements TableModelListener {
public MyClass() {
initComponents();
...
updateChart();
}
private void updateChart() {
XYDataset dataset = createXYdataset();
JFreeChart chart = createChart(dataset);
JPanel chartPanel = new ChartPanel(chart);
setContentPane(chartPanel);
}
private XYDataset createXYdataset() {
XYSeries series = new XYSeries("");
int rows = jTable.getRowCount();
if (rows > 0) {
int ms = 0;
for (int row = 0; row < rows; row++) {
series.add(ms, 1);
ms += Integer.parseInt(
jTable.getValueAt(row, PULSE_ON).toString());
series.add(ms, 1);
series.add(ms, 0);
ms += Integer.parseInt(
jTable.getValueAt(row, PULSE_OFF).toString());
series.add(ms, 0);
}
}
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
return dataset;
}
private JFreeChart createChart(XYDataset dataset) {
JFreeChart chart = ChartFactory.createXYLineChart(
null, // chart title
"ms", // x axis label
null, // y axis label
dataset, // data
PlotOrientation.VERTICAL,
false, // include legend
true, // tooltips
false // urls
);
XYPlot plot = (XYPlot) chart.getPlot();
plot.setDomainPannable(true);
plot.setRangePannable(true);
plot.setRangeGridlinesVisible(false);
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
return chart;
}
}
code corrigé:
private void updateChart() {
XYDataset dataset = createXYdataset();
JFreeChart chart = createChart(dataset);
JPanel chartPanel = new ChartPanel(chart);
chartPanel.setSize(jPanel1.getSize());
jPanel1.add(chartPanel);
jPanel1.getParent().validate();
}
L'EDI NetBeans semble utiliser un GroupLayout pour LayoutManager. J'ai ajouté un JPanel appelé jPanel1 au projet et 'jPanel1.add (chartPanel); jPanel1.getParent(). validate(); et jPanel1.setVisible (true); 'à' updateChart() 'mais le graphique n'est pas visible dans jPanel1. D'autres idées? – jacknad
GroupLayout nécessite l'utilisation de contraintes dont je ne sais rien. Je suppose que le problème est que le panneau vide a une taille préférée de 0, de sorte que les contraintes ne sont pas définies correctement pour y ajouter un autre composant. Je construis toujours mes mises en page GUI à la main, donc je suis en plein contrôle de la mise en page. Donc, ma suggestion serait d'apprendre à utiliser les gestionnaires de disposition et de faire le codage vous-même alors vous n'êtes pas dépendant de l'IDE. – camickr
Merci un million pour l'indice. Tout ce dont il avait besoin était un 'chartPanel.setSize (jPanel1.getSize());'. – jacknad