Esto es similar a una pregunta que hice ayer pero más específica al problema. ¿Cuál es el método correcto para agregar un JFreeChart a un proyecto de NetBeans que ya contiene varios widgets? Mi updateChart() oculta el JFrame completo. Me gustaría agregar el JFreeChart al JFrame.Cómo mostrar un JFreeChart en un proyecto de 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;
}
}
código corregido:
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();
}
El NetBeans IDE parece estar utilizando un GroupLayout para el LayoutManager. Agregué un JPanel llamado jPanel1 al proyecto y 'jPanel1.add (chartPanel); jPanel1.getParent(). validate(); y jPanel1.setVisible (true); 'to' updateChart() 'pero el gráfico no está visible en jPanel1. ¿Alguna otra idea? – jacknad
GroupLayout requiere el uso de restricciones de las que no sé nada. Supongo que el problema es que el panel vacío tiene un tamaño preferido de 0, por lo que las restricciones no se configuran correctamente para agregarle otro componente. Siempre construyo mis diseños de GUI a mano, así que tengo el control total del diseño. Así que mi sugerencia sería aprender cómo usar los administradores de diseño y hacer la codificación usted mismo, entonces usted no es dependiente del IDE. – camickr
Gracias un millón por la pista. Todo lo que necesitaba era un 'chartPanel.setSize (jPanel1.getSize());'. – jacknad