buongiorno a tutti....sono nuovo del forum quindi scusate eventuali errori o incongruenze....sto creando un software il quale gestisce delle distribuzioni di probabilità memorizzate su un database e in seguito ne disegna il grafico. all'interno di un frame sulla sinistra ho creato una tabella contenente i dati e sulla sinistra ho creato un internal frame contenente il grafico creato grazie a jFreechart. Il problema è che l'internal frame viene visualizzato ma è completamente vuoto. ho già provato a debuggare ecc ma non trovo dove sia il problema.....posto qui il codice dei metodi che utilizzo:
codice:
public void CreaTabella() {
String sql = "select c.modalita, c.valore from caratteri as c, distribuzioni as d where d.nome=c.distribuzione and d.nome=? order by c.modalita";
try {
pst = conn.prepareStatement(sql);
pst.setString(1, distribuzione);
rs = pst.executeQuery();
Tabella.setModel(DbUtils.resultSetToTableModel(rs));
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
TableColumn colonna2 = Tabella.getColumnModel().getColumn(0);
colonna2.setHeaderValue("Modalità");
TableColumn colonna1 = Tabella.getColumnModel().getColumn(1);
colonna1.setHeaderValue("Valore");
Tabella.setColumnSelectionAllowed(false);
Tabella.setRowSelectionAllowed(true);
this.setValori();
this.setMedia();
this.setSqm();
EtichettaMedia.setText(String.valueOf(media));
EtichettaSqm.setText(String.valueOf(sqm));
this.setData();
this.creaGrafico(distribuzione);
}
public void creaGrafico(String distrib) {
createFrame();
frame.pack();
frame.setLocation(0, 0);
}
public void createFrame() {
final XYDataset dataset1 = createDataset();
final JFreeChart chart = createChart(dataset1);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(800, 600));
frame.getContentPane().add(chartPanel);
}
public JFreeChart createChart(final XYDataset dataset) {
final JFreeChart chart = ChartFactory.createXYLineChart("Grafico a Linea", "Label", "Valori", dataset, PlotOrientation.VERTICAL, true, true, false); //titolo,assex,assey,dataset,orientamento del grafico,mostra la legenda,usa i tooltip
XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true, true);
plot.setRenderer(renderer);
renderer.setBaseShapesVisible(true);
renderer.setBaseShapesFilled(true);
NumberFormat format = NumberFormat.getNumberInstance();
format.setMaximumFractionDigits(2);
XYItemLabelGenerator generator = new StandardXYItemLabelGenerator(StandardXYItemLabelGenerator.DEFAULT_ITEM_LABEL_FORMAT, format, format);
renderer.setBaseItemLabelGenerator(generator);
renderer.setBaseItemLabelsVisible(true);
return chart;
}
/**
* * Creates a sample dataset.
*
* * @param name the dataset name.
* @param base the starting value.
* @param start the starting period.
* * @return The dataset.
*/
private XYDataset createDataset() {
final XYSeries dataset = new XYSeries("Dati");
try {
Connection conn = null;
ResultSet rs = null;
PreparedStatement pst = null;
int i = 0;
conn = ConnessioneDatabase.ConnectDb();
String sql = "SELECT modalita, valore FROM caratteri WHERE distribuzione=?";
pst = conn.prepareStatement(sql);
pst.setString(1, distribuzione);
rs = pst.executeQuery();
while (rs.next()) {
dataset.add(Double.parseDouble(rs.getString("modalita")), Double.parseDouble(rs.getString("valore")));
i++;
}
pst.close();
} catch (SQLException ex) {
Logger.getLogger(Grafico.class.getName()).log(Level.SEVERE, null, ex);
}
return new XYSeriesCollection(dataset);
}
il metodo creaTabella viene richiamato all'interno del costruttore e al suo interno viene chiamato il metodo createFrame, il quale crea il frame. frame è un jInternalFrame dichiarato globalmente....