IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

problème d'impression de JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut problème d'impression de JTable
    bonjour je n'arive pas a gérer une impression d'une JTable si quelqu'un peut m'aider voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
     
    package inter;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.print.PageFormat;
    import java.awt.print.Printable;
    import java.awt.print.PrinterException;
    import java.awt.print.PrinterJob;
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.TableModel;
     
    import inter.ShipTableAlim.ShipTableAlimModel;
     
    public class ImpressionTable extends JPanel implements Printable {
    /**
             * 
             */
    	private static final long serialVersionUID = 1L;
    JTable tableView;
    public ImpressionTable() 
    {
    	this.setLayout(new BorderLayout());
     
     
     
     
     
     
    	TableModel model = new ShipTableAlimModel();
    	JTable table = new JTable(model);
     
    	((ShipTableAlimModel) model).setDataAlim();
     
    	table.setPreferredScrollableViewportSize(new Dimension(780, 400)); 
    	JScrollPane scrollPane = new JScrollPane(tableView);
    	scrollPane.setPreferredSize(new Dimension(550, 80));
    	this.add(BorderLayout.CENTER, scrollPane); 
     
    	JButton printButton = new JButton();
    	printButton.setText("Imprimez moi !");
    	this.add(BorderLayout.SOUTH, printButton);
    	PrinterJob pj = PrinterJob.getPrinterJob(); 
    	pj.setPrintable(ImpressionTable.this); 
    	pj.printDialog(); 
    	try 
    	{
    	pj.print(); 
    	} 
    	catch (Exception PrintException) 
    	{ 
    		System.out.println("ca marche pas");
    	} 
    	}
     
     
     
    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 fontDescent = g2.getFontMetrics().getDescent();
     
    // laisser de l'espace pour le numero de page
    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());
    // en bas au centre
    g2.drawString("Page: " + (pageIndex +1),(int)pageWidth/2 - 35, (int)(pageHeight + fontHeight - fontDescent));
    g2.translate(0f, headerHeightOnPage);
    g2.translate(0f, -pageIndex*pageHeightForTable);
    // si cette partie de la page est plus petite
    // que la taille disponible, alors découper les contours appropriés
    if (pageIndex + 1 == totalNumPages) 
    { 
    int lastRowPrinted = numRowsOnAPage * pageIndex; 
    int numRowsLeft = tableView.getRowCount() - lastRowPrinted; 
    g2.setClip(0, (int)(pageHeightForTable * pageIndex),(int)Math.ceil(tableWidthOnPage),(int)Math.ceil(oneRowHeight * numRowsLeft));
    }
    // sinon découper la zone disponible toute entière
    else 
    {
    g2.setClip(0, (int)(pageHeightForTable * pageIndex),(int)Math.ceil(tableWidthOnPage),(int)Math.ceil(pageHeightForTable));
    }
    g2.scale(scale, scale);
    tableView.paint(g2);
    // dessiner les entêtes en haut
    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);
    return Printable.PAGE_EXISTS;
    }
     
    public static void main(String[] argv)
    {
     
    	ImpressionTable ps = new ImpressionTable();
     
     
     
    }
    }
    le problème c'est que tout à l'air de bien fonctionner la fenetre d'impression apparait mais j'ai toujours le message que j'ai mi dans la clause catch donc je ne sais plus quoi faire.

    Je vous remercie d'avance de votre réponse

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    mets plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PrintException.printStackTrace()
    dans le bloc catch, ce t'affichera l'erreur dans la console

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut
    java.lang.NullPointerException
    at inter.ImpressionTable.print(ImpressionTable.java:79)
    at sun.print.RasterPrinterJob.printPage(Unknown Source)
    at sun.print.RasterPrinterJob.print(Unknown Source)
    at sun.print.RasterPrinterJob.print(Unknown Source)
    at inter.ImpressionTable.<init>(ImpressionTable.java:59)
    at inter.ImpressionTable.main(ImpressionTable.java:127)

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    si tu clique sur la premiere ligne il doit te ramener sur la ligne de code qui a causé l'erreur.

    d'apres l'erreur : tu essai d'utiliser un objet qui est null.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut
    justement il est loin d'etre null c ca le problème!donc je ne sais pas trop si c'est une histoire de conteneur mal géré ou autre chose en tout cas je vois pas du tout c'est ou l'erreur

  6. #6
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    l'erreur est clair : java.lang.NullPointerException
    un pointeur null, je ne sais pas ou mais il essai d'utiliser un objet qui est null, du coup ca plante.

    mets la ligne sur laquelle il te revoit

Discussions similaires

  1. problème d'impression
    Par davedenice dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 28/07/2005, 16h57
  2. [PowerBuilder] Problème d'impression datawindow composite
    Par jpdar dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 17/05/2005, 13h33
  3. Réponses: 16
    Dernier message: 17/03/2005, 13h54
  4. [Rave] problème d'impression
    Par romstarr dans le forum Rave
    Réponses: 2
    Dernier message: 09/06/2004, 15h48
  5. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo