Jest to podobne do pytania, które zadałem wczoraj, ale bardziej szczegółowe na temat problemu. Jaka jest poprawna metoda dodawania JFreeChart do projektu NetBeans, który zawiera już różne widżety? Moja aktualizacjaChart() ukrywa całą ramkę JFrame. Chciałbym dodać JFreeChart do JFrame.Jak wyświetlić JFreeChart w projekcie 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;
}
}
Poprawiono kod:
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();
}
IDE NetBeans wydaje się używać GroupLayout dla LayoutManager. Dodałem JPanel o nazwie jPanel1 do projektu i 'jPanel1.add (chartPanel); jPanel1.getParent(). validate(); i jPanel1.setVisible (true); 'to' updateChart() ', ale wykres nie jest widoczny w jPanel1. Jakieś inne pomysły? – jacknad
GroupLayout wymaga użycia ograniczeń, o których nic nie wiem. Domyślam się, że problem polega na tym, że pusty panel ma preferowany rozmiar 0, więc ograniczenia nie są ustawione poprawnie, aby dodać do niego inny komponent. Zawsze układam swoje układy GUI ręcznie, więc mam pełną kontrolę nad układem. Tak więc moją sugestią byłoby nauczenie się korzystania z menedżerów układu i samodzielne kodowanie, a nie jesteś zależny od IDE. – camickr
Dzięki za wiadomość. Wszystko, czego potrzebował, to 'chartPanel.setSize (jPanel1.getSize());'. – jacknad