Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    problema JInternalFrame

    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....

  2. #2
    Così è un pò complicato capirlo...potrebbe essere qualunque cosa....ho lavorato anch'io su JFreeChart e capisco la complessità...
    però una cosa ti chiedo...perché JInternalFrame?
    Hai appena detto che hai un JFrame, no?
    JInternalFrame funziona generalmente con JDesktopPane.

    Ciao
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    Inizialmente avevo pensato a un jInternalFrame e avrei anche risolto il problema. adesso però mi rendo conto che il grafico su un pannello sarebbe una soluzione migliore, ma mi si ripresenta lo stesso problema: il grafico non viene visualizzato.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.