asetti
Messages postés61Date d'inscriptionjeudi 22 juillet 2004StatutMembreDernière intervention15 mai 2010
-
11 août 2004 à 09:25
jose185
Messages postés1Date d'inscriptionvendredi 15 juin 2007StatutMembreDernière intervention22 juin 2007
-
22 juin 2007 à 14:58
salut,
j'ai créer un programme qui, entre autre, imprime une jTable.
mon seul problème c'est qu'il imprime toute les lignes même celle qui n'ont pas été rempli.
Comme ma table fait environ 150 lignes (soit plusieurs page) et que dans certains cas il peut y en avoir qu'une vingtaine, je trouve un peu bête de tout imprimé.
y'a t-il une solution pour n'imprimé que les lignes remplis.
Merci
Je vous passe mon code (ça peu aider ceux qui veulent imprimer avec un titre)
//méthodes
public Report(JTable tt, String leTitre, String info2, boolean Portrait) {
this.tableView = tt;
this.titre = leTitre;
this.Portrait = Portrait;
this.info2=info2;
frame = new JFrame("Rapport des ventes");
final String[] headers = {"Numero", "Nom de l'expedition", "Date", "Valide"};
tableView = new JTable(tt.getModel());
JScrollPane scrollPane = new JScrollPane(tableView);
if (Portrait == false) {
tableView.getColumnModel().getColumn(0).setPreferredWidth(95);
tableView.getColumnModel().getColumn(1).setPreferredWidth(158);
tableView.getColumnModel().getColumn(2).setPreferredWidth(158);
tableView.getColumnModel().getColumn(3).setPreferredWidth(158);
tableView.getColumnModel().getColumn(4).setPreferredWidth(158);
tableView.getColumnModel().getColumn(5).setPreferredWidth(158);
tableView.getColumnModel().getColumn(6).setPreferredWidth(158);
tableView.getColumnModel().getColumn(7).setPreferredWidth(507);
scrollPane.setPreferredSize(new Dimension(1550, 80));
}
else {
scrollPane.setPreferredSize(new Dimension(550, 80));
tableView.getColumnModel().getColumn(0).setPreferredWidth(100);
tableView.getColumnModel().getColumn(1).setPreferredWidth(265);
tableView.getColumnModel().getColumn(2).setPreferredWidth(130);
tableView.getColumnModel().getColumn(3).setPreferredWidth(55);
}
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);
//frame.setVisible(true);
public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws
PrinterException {
Graphics2D g2 = (Graphics2D) g;
Font defaultFont = g2.getFont();
g2.setColor(Color.black);
int fontHeight = g2.getFontMetrics().getHeight();
int fontDescent = g2.getFontMetrics().getDescent();
// laisser de l'espace pour le numero de page
double pageHauteur = pageFormat.getImageableHeight() - fontHeight;
double pageLargeur = pageFormat.getImageableWidth();
double largeurTable = (double) tableView.getColumnModel().getTotalColumnWidth();
double scale = 1; //echelle (pour la redimension de la table)
// si cette partie de la page est plus petite
// que la taille disponible, alors découper les contours appropriés
if (pageIndex + 1 == nbTotalPage) {
int DerniereLignImprime = nbLigneSurPage * pageIndex;
int nbLigneRestante = tableView.getRowCount() - DerniereLignImprime;
g2.setClip(0, (int) (HauteurPagePoutTable * pageIndex), (int) Math.ceil(LargeurTableSurPage), (int) Math.ceil(HauteurUneLigne * nbLigneRestante));
}
// sinon découper la zone disponible toute entière
else {
g2.setClip(0, (int) (HauteurPagePoutTable * pageIndex), (int) Math.ceil(LargeurTableSurPage), (int) Math.ceil(HauteurPagePoutTable));
}
g2.scale(scale, scale);
tableView.paint(g2);
// dessiner les entêtes en haut
g2.scale(1 / scale, 1 / scale);
g2.translate(0f, pageIndex * HauteurPagePoutTable);
g2.translate(0f, -HauteurEnTeteSurPage);
g2.setClip(0, -44, (int) Math.ceil(LargeurTableSurPage), (int) Math.ceil(HauteurEnTeteSurPage) + 44);
g2.scale(scale, scale);
tableView.getTableHeader().paint(g2);
//Dessiner le titre
g2.translate(0f, -10);
Font titleFont = defaultFont.deriveFont(Font.BOLD, 16);
g2.setFont(titleFont);
//g2.setColor(Color.red);
g2.drawString(this.titre, (int) pageLargeur / 2 - 35, -10);
g2.setFont(defaultFont);
cid019
Messages postés237Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention11 juillet 2006 12 août 2004 à 10:03
voila je te passe tout ca. c'est ma classe pour gerer les tableaux.
// permet de créer un tableau de n colonnes
class LignesModel extends AbstractTableModel
{
private Vector[] vc;
private String[] st;
private int nbcol;
private boolean b;
public int getNbCol() { return nbcol; }
public Vector[] getVector() {return vc; }
public LignesModel(int nbc, String[] ch)
{
nbcol = nbc;
st = new String[nbcol];
vc = new Vector[nbcol];
for (int i = 0; i < nbcol; ++i)
{
st[i] = ch[i];
vc[i] = new Vector();
}
}
public void effacerTout()
{
for (int i = 0; i < nbcol; ++i)
vc[i].clear();
}
public void effacerLigne(int index)
{
for (int i = 0; i < nbcol; i++)
vc[i].removeElementAt(index);
}
public void ajouterLigne(String[] ch)
{
for (int i = 0; i < nbcol; ++i)
vc[i].add(ch[i]);
}
public String[] getColonne(int index)
{
return (String[]) vc[index].toArray(new String[vc[index].size()]);
}
public String[][] getLignes(int nbl)
{
String[][] res = new String[nbl][nbcol];
for (int i = 0; i < nbl; i++)
for (int j = 0; j < nbcol; j++)
res[i][j] = vc[j].elementAt(i).toString();
return res;
}
public String[] getLigne(int index)
{
String[] res = new String[nbcol];
for (int i = 0; i < nbcol; i++)
res[i] = vc[i].elementAt(index).toString();
return res;
}
public int getColumnCount()
{
return nbcol;
}
public int getRowCount()
{
return vc[0].size();
}
public String getColumnName(int col)
{
return st[col];
}
public Object getValueAt(int parm1, int parm2)
{
return vc[parm2].get(parm1);
}
public boolean isCellEditable(int row, int col)
{
return true;
}
public void setValueAt(Object obj, int row, int col)
{
vc[col].set(row, obj);
fireTableCellUpdated(row,col);
}
}
la fonction qui t'interesse devrait etre getLigne(int index)
libeur
Messages postés36Date d'inscriptionjeudi 5 août 2004StatutMembreDernière intervention24 décembre 20042 12 août 2004 à 11:56
Salut,
Apparemment, la Jtable te sert à faire de la saisie. Essaie de repasser par une nouvelle fenêtre (pas nécessairement visible à l'utilisateur), où tu affiche que les lignes remplies (getLigne de cid019 + test si c'est vide). Comme ça tu touche pas à ta fonctions print.
Rien ne sert de partir à point, il vaut mieux courir.