Swing JTable drucken/Darstellung

marian04

Aktives Mitglied
Hallo,

ich muss mich mal wieder an euch wenden, da ihr mir bis jetzt immer mit guten Tipps und Tricks gehelfen konntet.
Und zwar habe ich folgendes Problem :

Ich habe eine Tablle, welche mit variablen Daten aus einer Datenbank gefüllt wird.
Nun möchte ich diese drucken, also bediente ich mich der Methode table.print(); und table.print(PrintMode.NORMAL/FIT), jedoch bekomme ich dann immer nur 1,5 Spalten der Tablle auf mein Blatt egal welche Einstellungen ich vornehme.

Code:
	JTable table = new JTable ();
	table.setBounds(20,20,400,100);
    table.setModel(new DatenModel(groesse, 3, rechnungen));
    ChangeName(table,0,"Sponsorenname");
    ChangeName(table,1,"Betrag pro Runde");
    ChangeName(table,2,"Gesamtbetrag");
    table.getTableHeader().setSize(400,30);
    JScrollPane spr = new JScrollPane(table);
	spr.setBounds(40,50,500,400);
	pRight.add(spr);

Dies ist der Code der Tablle

Code:
import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

public class DatenModel extends AbstractTableModel{
private int row;
private int column;
private int value;
private ArrayList<Rechnung> rechnungen;

public DatenModel(int rowcount, int colCount, ArrayList<Rechnung> rechnungen)
{
	this.row = rowcount;
	this.column = colCount;
	this.rechnungen = rechnungen;
}
	
@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return this.row;
	}

@Override
public int getColumnCount() {
	// TODO Auto-generated method stub
	return this.column;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
	// TODO Auto-generated method stub
	switch (columnIndex) {
	case 0:
		return rechnungen.get(rowIndex).getName();
	case 1:
		return rechnungen.get(rowIndex).getRundenBetrag();
	case 2:
		return rechnungen.get(rowIndex).getGesamt();
	default:
		return null;
	}
}

};

Dies der Code des Datenmodels.


Im Anhang habe ich ein Screenshot, wie die Tabelle aussieht und nun stellt euch vor, sie wird auf einem Din A4 Blatt immer oben zentriert gedruckt bis zur hälfte der zweiten Spalte.
Ich hoffe jemand von euch, weiß wie ich mein Problem lösen kann.


Liebe Grüße
 

Anhänge

  • Druckproblem.png
    Druckproblem.png
    46,4 KB · Aufrufe: 37
Wenn ich mich folgender Methode bzw diesem Ausschnitt bediene :

Code:
 boolean fitWidth = true;
    boolean showPrintDialog = true;
    boolean interactive =true;
    MessageFormat header = null;
    MessageFormat footer= null;

    
    JTable.PrintMode mode = fitWidth ? JTable.PrintMode.FIT_WIDTH
                                     : JTable.PrintMode.NORMAL;

    try {
     
        boolean complete = table.print(mode, header, footer,
                                             showPrintDialog, null,
                                             interactive, null);

       
        if (complete) {
           
            JOptionPane.showMessageDialog(this,
                                          "Printing Complete",
                                          "Printing Result",
                                          JOptionPane.INFORMATION_MESSAGE);
        } else {
            
            JOptionPane.showMessageDialog(this,
                                          "Printing Cancelled",
                                          "Printing Result",
                                          JOptionPane.INFORMATION_MESSAGE);
        }
    } catch (PrinterException pe) {
       
        JOptionPane.showMessageDialog(this,
                                      "Printing Failed: " + pe.getMessage(),
                                      "Printing Result",
                                      JOptionPane.ERROR_MESSAGE);
    }
funktioniert das ganze soweit schonmal, nur leider muss ich dann jedes mal von Hand einstellen, dass der Drucker in Din A3 auf ein Din A4 Blatt drucken muss, da sonst wieder nur die Hälfte auf das Blatt gedruckt wird und der Rand so ca 4 cm Breit ist.


Liebe Grüße
 
Hallo Marian,

versuch's mal mit einem PrintRequestAttributeSet. Beispiel:

Java:
PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
attr.add(OrientationRequested.PORTRAIT);
attr.add(MediaSizeName.ISO_A4);
MediaSize mediaSize = MediaSize.ISO.A4;
float mediaWidth = mediaSize.getX(Size2DSyntax.MM);
float mediaHeight = mediaSize.getY(Size2DSyntax.MM);
attr.add(new MediaPrintableArea(5, 5, (mediaWidth - 10), (mediaHeight - 10), Size2DSyntax.MM));

Gruß,
André
 

Neue Themen


Zurück
Oben