Imprimer en Paysage une table JTABLE avec le code ci-joint, qui fait deja du res

icarusomega Messages postés 6 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 8 août 2004 - 29 juil. 2004 à 21:00
icarusomega Messages postés 6 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 8 août 2004 - 8 août 2004 à 04:07
Salut,
J ai bossé pas mal de temps pour essayer de modifier l impression en format paysage mais je n y arrive pas, je vous passerai mes modifs de guerrier mais ca ne veut pas !!
C'est une question de 3 lignes mais bon...
Un petit peu d'aide serait le bien venu

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 Report implements Printable {
JFrame frame;
JTable tableView;

public Report() {
frame = new JFrame("Rapport des ventes");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

final String[] headers = {"Description", "prix d'ouverture",
"dernier prix", "Date de fin", "Quantité"};

final Object[][] data = {
{"Box of Biros", "1.00", "4.99", new Date(), new Integer(2)},
{"Blue Biro", "0.10", "0.14", new Date(), new Integer(1)},
{"legal pad", "1.00", "2.49", new Date(), new Integer(1)},
{"tape", "1.00", "1.49", new Date(), new Integer(1)},
{"stapler", "4.00", "4.49", new Date(), new Integer(1)},
{"legal pad", "1.00", "2.29", new Date(), new Integer(5)}
};

TableModel dataModel = new AbstractTableModel() {
public int getColumnCount() {
return headers.length;
}

public int getRowCount() {
return data.length;
}

public Object getValueAt(int row, int col) {
return data[row][col];
}

public String getColumnName(int column) {
return headers[column];
}

public Class getColumnClass(int col) {
return getValueAt(0, col).getClass();
}

public boolean isCellEditable(int row, int col) {
return (col == 1);
}

public void setValueAt(Object aValue, int row, int column) {
data[row][column] = aValue;
}
};

tableView = new JTable(dataModel);
JScrollPane scrollPane = new JScrollPane(tableView);

scrollPane.setPreferredSize(new Dimension(550, 80));
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(BorderLayout.CENTER, scrollPane);
frame.pack();

JButton printButton = new JButton();

printButton.setText("Imprimez moi !");

frame.getContentPane().add(BorderLayout.SOUTH, printButton);

// pour une impression plus rapide nous désactive de double buffering
RepaintManager.currentManager(frame).setDoubleBufferingEnabled(false);

printButton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent evt) {
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(Report.this);
pj.printDialog();
try {
pj.print();
} catch (Exception PrintException) { }
}
});

frame.setVisible(true);
}

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[] args) {
new Report();
}
}

10 réponses

wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
30 juil. 2004 à 09:02
expose plus calmement ton pb...
0
icarusomega Messages postés 6 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 8 août 2004
30 juil. 2004 à 12:53
D'origine les impressions sont au format portrait mais je souhaite imprimer au format paysage si quelqu'un pouvait me dire comment faire ou me donner les lignes de code nécessaire.

Guillaume.
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
30 juil. 2004 à 13:18
PrinterJob pj = PrinterJob.getPrinterJob();
pj.defaultPage(PageFormat.LANDSCAPE);
0
icarusomega Messages postés 6 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 8 août 2004
30 juil. 2004 à 15:39
Le problème est qu'il me dit que la méthode pagedefault requiere un int :
kernel/Candidature/NouveauKernel.java [1 239:1] cannot resolve symbol
symbol : method defaultPage (int)
location: class java.awt.print.PrinterJob
pj.defaultPage(PageFormat.LANDSCAPE);
^
mais ne faut il pas utiliser setorientable ?

Guillaume.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
30 juil. 2004 à 15:55
quel JDK utilises tu?

c'est bizarre comme truc.

sinon pj.printDialog(); doit pouvoir prendre PageFormat.LANDSCAPE comme param.
0
icarusomega Messages postés 6 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 8 août 2004
30 juil. 2004 à 15:59
J'utilise j2sdk1.4.2_04.
Et Netbeans pour IDE.
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
30 juil. 2004 à 16:48
oupps nan effectivement il faut creer un PageFormat avec dedant le setOrientation a LANDSCAPE ...
0
icarusomega Messages postés 6 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 8 août 2004
30 juil. 2004 à 18:00
J'ai mit ca dans mon code mais ca ne veut pas fonctionner !!!

PageFormat landscape = pj.defaultPage();
landscape.setOrientation(PageFormat.LANDSCAPE);
pj.setPrintable(Report.this);
pj.printDialog();

Dans l'attente d'une aide !

Guillaume
0
cs_aishu Messages postés 17 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 24 août 2004
6 août 2004 à 16:42
Salut,

Actuellement j'ai le même problème que toi... tu as trouvé une solution pour imprimer en format paysage ?

Merci !

:shy) Aishu :big)
0
icarusomega Messages postés 6 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 8 août 2004
8 août 2004 à 04:07
erreur à la ligne :
pj.setPrintable(Report.this);

a remplacer par :

pj.setPrintable(Report.this, landscape);

Merci à tout ceux ki m'ont généreusement aidé pour enfin avoir de super impressions et bonne chance a tt ceux ki prendre ce bout de code !!!

Guillaume la java machine
0
Rejoignez-nous