Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225

    [Java] Stampare una finestra con più JTable

    Ciao a tutti!
    Ho una finestra con una JTable e sono riuscita a stamparla tranquillamente!
    Il problema è che ho un altra finestra con più di una JTable, e mi stampa solo la prima!
    Come fare per farle stampare tutte?
    GRAZIE!

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ragazzi e urgentissimo!!
    Tra pochissimi giorni devo consegnare il progetto!
    AIUTATEMI VI PREGO!!!

    Questa è la classe per stampare una JTable...
    codice:
    import javax.swing.*;
    import javax.swing.table.*;
    
    import java.awt.print.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.awt.Dimension;
    
    public class StampaTabella implements Printable {
    
      JFrame frame;
      JTable tableView;
    
      public StampaTabella(JTable Tabella) {
        tableView = Tabella;
      }
    
        public void Stampa() {
          PrinterJob pj=PrinterJob.getPrinterJob();
            pj.setPrintable(StampaTabella.this);
            pj.printDialog();
            try{
                pj.print();
            }
            catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    
      public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException {
          Graphics2D  g2 = (Graphics2D) g;
            g2.setColor(Color.black);
            int fontHeight = g2.getFontMetrics().getHeight();
            int fontDesent = g2.getFontMetrics().getDescent();
            //leave room for page number
            double pageHeight = pageFormat.getImageableHeight()-fontHeight;
            double pageWidth = pageFormat.getImageableWidth();
            double tableWidth = (double)tableView.getColumnModel().getTotalColumnWidth();
            double scale = 1;
            if (tableWidth >= pageWidth) {
                scale =  pageWidth / tableWidth;
            }
            double headerHeightOnPage = tableView.getTableHeader().getHeight() * scale;
            double tableWidthOnPage = tableWidth * scale;
            double oneRowHeight = (tableView.getRowHeight() + tableView.getRowMargin()) * scale;
            int numRowsOnAPage = (int)((pageHeight - headerHeightOnPage) / oneRowHeight);
            double pageHeightForTable = oneRowHeight * numRowsOnAPage;
            int totalNumPages= (int)Math.ceil(((double)tableView.getRowCount()) / numRowsOnAPage);
            if(pageIndex>=totalNumPages) {
                return NO_SUCH_PAGE;
            }
            g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
            g2.drawString("Page: "+(pageIndex+1),(int)pageWidth/2-35,
                (int)(pageHeight+fontHeight-fontDesent));//bottom center
    
            g2.translate(0f,headerHeightOnPage);
            g2.translate(0f,-pageIndex*pageHeightForTable);
            //TODO this next line treats the last page as a full page
            g2.setClip(0, (int)(pageHeightForTable*pageIndex),(int)
                Math.ceil(tableWidthOnPage),
                (int) Math.ceil(pageHeightForTable));
    
            g2.scale(scale,scale);
            tableView.paint(g2);
            g2.scale(1/scale,1/scale);
            g2.translate(0f,pageIndex*pageHeightForTable);
            g2.translate(0f, -headerHeightOnPage);
            g2.setClip(0, 0,(int) Math.ceil(tableWidthOnPage),
                (int)Math.ceil(headerHeightOnPage));
            g2.scale(scale,scale);
            tableView.getTableHeader().paint(g2);//paint header at top
            return Printable.PAGE_EXISTS;
        }
    
    }
    GRAZIE GRAZIE GRAZIE

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    VI PREGO AIUTATEMI!
    Sono le 2.30 e ancora non ho risolto il problema!!
    E' l'unica cosa che mi manca!
    Mercoledì ho l'esame!
    Risolto questo problema non vi rompo più!!!
    GRAZIE MILLE IN ANTICIPO A CHI MI VORRA' AIUTARE!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    41
    Ciao.
    Io non ti so aiutare e neanche sono un moderatore, quindi non so enache se faccio abene a scrivere questo messaggio perché non so se aderisce molto bene al regolamento o se è meglio come hai fatto tu, ma trovo che sia molto dispersivo e ridondante il fatto di aprire tutti quei topic che hai aperto tu sulle jTable.... avrei trovato più efficiente l'apertura di un unico topic dove man mano potevi elencare i problemi che hai avuto con questo componente.
    Ripeto: è una mia opinione personale, ma trovo molto fastidioso e "affaticante" non so come spiegartlo, il fatto di leggere che in una paginata video del forum, una metà dei topic sono scritti dalla stessa persona sullo stesso argomento e la mia reazione immediata sarebbe di chiudere e tornare domani.... credo che il fatto che non ti sia stato risposto a tutte le tue domande possa derivare anche da una reazione psicologica del genere ^________^ più che da una non-volontà di rispondere (al di là di chi come me non ne sarebbe proprio capace)... tantopiù che alcuni dei tuoi topic sono rimasti in sospeso, come quello della stampa dove alla domanda di una persona di spiegazioni maggiori sul problema non hai risposto. Lungi da me di far critiche, sia chiaro, ma credo che per te questo sia controproducente, perché in questo modo non otterrai risposte in tempo per la consegna del tuo progetto ;-)
    in ogni caso non so se usi un IDE, ma se hai la possibilità di entrare in modalità debug, problemi simili potrebbero essere identificati vedendo come e in che ordine il programma esegue le istruzioni, su quali passa e su quali no e così via: un lavoro di pochi minuti ;-)

  5. #5
    Come richiami la stampa?
    Al mio segnale... scatenate l'inferno!

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Richiamo così la stampa!
    Grazie anche solo per l'interessamneto!

    codice:
    StampaTabella print = new StampaTabella(table);
    print.Stampa();
    print = null;

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ciao SHIRIM!
    Ti ringrazio per i consigli e mi dispiace se in questo modo ho stancato molta gente!
    Lo so che ho stressato un po' tutti...ma domani l'altro ho l'esame....è da luglio che lavoro al programma! E' il primo che faccio, perciò anche se non è difficile, per me è stato molto impegnativo!
    Ho aperto tutti quei post solo perchè pensavo che affrontare molte problematiche diverse in un unico post potesse non andare bene, anche se si trattava sempre di JTable!
    Pensavo che anche per gli ospiti del forum fosse più semplice capire cosa trattava il post iniziando diverse discussioni invece di fare un post solo intitolato JTable!
    Comunque ho capito e MI SCUSO ANCORA con tutti!
    Sono davvero amareggiata!

  8. #8
    Ma hai eseguito un ciclo passandogli di volta in volta una table differente?

    PS: sono d'accordo con te sui post multipli
    Al mio segnale... scatenate l'inferno!

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ho provato, ma non mi stampa niente!
    La stampante prende i fogli e li restituiace solo con il numero di pagina in fondo! Non stampa altro!
    GRAZIE MILLE!

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ho fatto il ciclo in questo modo:

    codice:
    int numTab = TABELLE.length();
    for (int i=1; i<=numTab; i++) {
    JTable table = (JTable)TABELLE.head();
    StampaTabella print = new StampaTabella(table);
    print.Stampa();
    print = null;
    TABELLE = (ListNode)TABELLE.tail();
    }
    Ma non mi ha stampato niente!

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.