Visualizzazione dei risultati da 1 a 5 su 5

Discussione: JTable e BLOB

  1. #1

    JTable e BLOB

    Ciao ragazzi ,
    non ho molta esperienza col java ma riesco a lavoricchiarci per fare
    qualche programmino utile.
    Mi sono imbattuto in un problemone gigantesco credo.
    Sarebbe per me eccezionale riuscire a capire come si fa:

    allora ho implementato (((((((((( DefaultTableCellRenderer ))))))))))

    codice:
    class IconRenderer extends DefaultTableCellRenderer {
    
    		@Override
    		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    			
    			final JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    
    			
    			if (value != null ) {
    				 try {
    
       ResultSet rs = pstmt.executeQuery();
       if (rs.next()) {
    
        Blob blob = rs.getBlob(8);
        ImageIcon imageIcon = new ImageIcon(
         blob.getBytes(1, (int)blob.length()));
    
    
        int width = imageIcon.getIconWidth();
        int height = imageIcon.getIconHeight();
    
    
        if (width > 600 || height > 600) {
    
    	double d = 100D / Math.max(width, height);
    
    	width = (int)Math.round(width * d);
    	height = (int)Math.round(height * d);
    
    
        Image img1 = imageIcon.getImage();
    
    	BufferedImage img2 = new BufferedImage(
    		width, height, BufferedImage.TYPE_INT_RGB
    	);
    	Graphics g = img2.getGraphics();
    	g.drawImage(img1, 0, 0, width, height, null);
       // g.drawLine(100, 100, 100, 100);
    	imageIcon = new ImageIcon(img2);
        label.setIcon(imageIcon);
    
       }
      }}
      catch (Exception ex) {
       System.err.println(ex);
      }
    			}
    
    			return label;
    		}
    
    
    	}
    questo funziona non mi da errori...
    poi ho questo :

    codice:
      dati = getDati();
    
            
            colonne= new Vector<String>();
           
    
            colonne.add("Cognome"); 
            colonne.add("Nome"); 
            colonne.add("Indirizzo");
            colonne.add("N-Telefono");
            colonne.add("N-Cellulare");
            colonne.add("N-Fax");
            colonne.add("E-Mail");
            colonne.add("Foto");
    e recupero i dati dal DB e popolo le celle cosi:

    codice:
    
    public Vector getDati()throws Exception
    {
    Vector<Vector<String>> RecuperaDatiVettore= new Vector<Vector<String>>();
    
    
    PreparedStatement pre = connection.prepareStatement("select * from jagenda");
    
    ResultSet rs = pre.executeQuery();
    
    while(rs.next())
    {
    Vector<String> RecuperaDati= new Vector<String>();
    RecuperaDati.add(rs.getString(1)); 
    RecuperaDati.add(rs.getString(2)); 
    RecuperaDati.add(rs.getString(3)); 
    RecuperaDati.add(rs.getString(4));
    RecuperaDati.add(rs.getString(5));
    RecuperaDati.add(rs.getString(6));
    RecuperaDati.add(rs.getString(7));
    
    Qui dovrei recuparare il campo "8"  che sarebbe la foto(CAMPO BLOB)  COME POTREI FARE ?
    
    
    RecuperaDatiVettore.add(RecuperaDati);
    }
    
    
    
    return RecuperaDatiVettore;
    }
    Adesso ho la classe - class IconRenderer extends DefaultTableCellRenderer - che mi recupera il blob e so per certo che funziona perchè anche ina ltri software recupero stupendamente i campi blob da mysql
    MA COME potrei fare a popolare la cella numero 8 della mia tabella con "IconRender" estensione della DefaultTableCellRederer ?
    Ho letto e provato di tutto ma forse sono andato in confusione e non ci ho capito piu nulla.
    Mi sono perso qui:
    codice:
    TableColumnModel columnModel = table.getColumnModel();
                    JTAB.setRowHeight(300);
                 
    		columnModel.getColumn(8).setPreferredWidth(200);
                   
    
    		columnModel.getColumn(0).setCellRenderer(new IconRenderer());
    chi ha pazienza di leggersi tutto è mi sappia indicare come risolvere la cosa....gle ne sarei enormemente grato!

    un saluto.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: JTable e BLOB

    Originariamente inviato da spiritoserio
    allora ho implementato (((((((((( DefaultTableCellRenderer ))))))))))

    codice:
    class IconRenderer extends DefaultTableCellRenderer {
    
    		@Override
    		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    			
    			final JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    
    			
    			if (value != null ) {
    				 try {
    
       ResultSet rs = pstmt.executeQuery();
       if (rs.next()) {
    
        Blob blob = rs.getBlob(8);
    .....
    questo funziona non mi da errori...
    Nooooo ma è sbagliatissimo!!!
    Per carità ..... non fare mai query e quant'altro su DB all'interno di un "renderer"!

    Il renderer deve fare solo 1 cosa concettualmente. Nel getTableCellRendererComponent() riceve quel Object value il cui oggetto reale è quello che viene passato dal model (e chiaramente il tipo deve essere quello che il renderer si "aspetta") e imposta il componente per visualizzarlo.
    Punto, tutto qua.

    Se devi fare query, uso di ResultSet e quant'altro dovresti farlo o in un "tuo" model custom specifico oppure da un'altra parte (supponendo che il model non "sappia" nulla di query ecc...).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ciao , grazie per la risposta...

    il fatto è che è la prima volta che uso JTable.
    Ho letto un po' di documentazione e esempi vari...
    in altre applicazioni funziona benissimo ma non riesco proprio a capire come recuperare il "BLOB" da inserire nella cella N°8
    So come recuperare e ridimensionare il Blob ma non capisco proprio come posso recuperarlo per inserirlo nella cella della JTable Ho provato di tutto ma nulla...
    Allora so che nella cella devo passargli una JLabel che accoglierà l'immagine(blob) ma come faccio con il renderer ?
    Poi il per recuperare gli altri dati uso un Vector di String quindi sono arenato...

    Non hai link dimostrativi o fare qualche esempio?

    ciao.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da spiritoserio
    in altre applicazioni funziona benissimo ma non riesco proprio a capire come recuperare il "BLOB" da inserire nella cella N°8
    So come recuperare e ridimensionare il Blob ma non capisco proprio come posso recuperarlo per inserirlo nella cella della JTable Ho provato di tutto ma nulla...
    Quando si usa JTable bisogna "lavorare" con i table model. Ovvero bisogna vedere e stabilire quale implementazione di TableModel usare, se una "tua" (che tipicamente estende AbstractTableModel) o una di default (es. DefaultTableModel).

    Originariamente inviato da spiritoserio
    Allora so che nella cella devo passargli una JLabel che accoglierà l'immagine(blob) ma come faccio con il renderer ?
    No, nel modello non ci dovrebbero essere "componenti" grafici. Solo dati .... al massimo dei Image o ImageIcon. Se il modello "espone" al di fuori, per una certa colonna, oggetti Image o ImageIcon e c'è un renderer (tuo o predefinito) che "sa" di ricevere appunto un Image o ImageIcon, allora il renderer è di certo in grado di visualizzarlo.

    Originariamente inviato da spiritoserio
    Non hai link dimostrativi o fare qualche esempio?
    Su JTable, i table model e i renderer trovi svariati esempi tra i miei Java Examples (vedi firma).
    Ma nota che c'è il tutorial ufficiale della Sun che ha una sezione dedicata alle tabelle:
    How to Use Tables
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ciao AndBin e grazie ancora,
    non ci crederai ma ho usato ancora i tuoi "SPETTACOLARI" esempi a me molto utili in varie circostanze.

    Ho anche letto e provato gli esempi della Sun sulle JTable...ma la cosa mi sa che non fa per me è un po' complessa per adesso.

    alla fine a me servirebbe un "Image" proverò a spulciare ancora la rete alla caccia di qualcosa che serve a me.

    Intanto ti ringrazio infinitamente per la tua immensa disponibilità
    ti farò sapere se riuscirò a risolvere se non mi senti perchè non ci riuscirò!
    Buon pomeriggio.

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.