# JTable mit Inhalt drucken



## Olli123 (2. Apr 2011)

Hallo liebe Java-Freunde!

Nachdem ich nun endlich eine funktionierende JTable1 hinbekommen habe, möchte ich diese ausdrucken. Da jedoch nicht alle Zeilen ausgefüllt sind und ich die leeren Zeilen nicht ausgedruckt haben möchte erzeuge ich eine neue JTable2 mit dem Inhalt der alten JTable1 ohne die leeren Zeilen. 
Soweit so gut. Nachdem sie befüllt wurde, teste ich per System.out.println ob die Inhalte in die JTable2 eingebettet wurden. Dies ist auch der Fall. 
Jedoch erhalte ich beim ausdrucken einen leeren Kasten ohne Trennwände und ohne Inhalt der JTable2. Dabei benutze ich die folgende Methode:


```
public void print()
{
        JFrame frame = new JFrame("Table Printing");
        meineTabelle_print = new JTable(new Object [anzahlzeilen][anzahlSpalten],new String []{"String1", "String2", "String3"});
        meineTabelle_print.setEnabled(true);
        meineTabelle_print.setVisible(true);

        for(int i=0; i<anzahlZeilen; i++)
        {
            for(int j=0; j<anzahlSpalten; j++)
            {
                meineTabelle_print.setValueAt(meineTabelle.getValueAt(i, j), i,j);
            }
        }

        JScrollPane scrollPane = new JScrollPane(meineTabelle_print);
        frame.add(scrollPane, BorderLayout.CENTER);

        try
        {
            meineTabelle_print.print(JTable.PrintMode.FIT_WIDTH, new MessageFormat("Header"), new MessageFormat("Footer"));
        }
        catch (java.awt.print.PrinterException e)
        {
            e.printStackTrace();
        }
}
```


Der Kasten hat zwar die genaue Größe der Zeilen, jedoch fehlt der Inhalt.
Falls noch Quellcode benötigt wird, poste ich diesen natürlich gerne.



Hat jemand eine Idee an was das liegen könnte?


Vielen dank für jegliche Hilfe!!!

Mit freundlichen Grüßen

Olli123


----------



## jgh (3. Apr 2011)

wenn daten in der 
	
	
	
	





```
meineTabelle_print
```
 vorhanden sind...würde ich evtl. probieren, setEnabled und setVisible erst nach dem Füllen der Tabelle aufzurufen

```
for(int i=0; i<anzahlZeilen; i++)
        {
            for(int j=0; j<anzahlSpalten; j++)
            {
                meineTabelle_print.setValueAt(meineTabelle.getValueAt(i, j), i,j);
            }
        }

meineTabelle_print.setEnabled(true);
        meineTabelle_print.setVisible(true);
```

ansonsten evtl. den JTable.PrintMode.NORMAL zu nutzen...sind halt einfach nur Ideen!?


----------



## Olli123 (3. Apr 2011)

Danke für deine Hilfe aber es hat leider nicht geholfen... =(

Hat wer sonst noch ne Möglichkeit an was es liegen könnte?


Edit:
Habe es herausgefunden, woran es liegt:

die Tabelle muss erst als JFrame auf den Bildschirm ausgegeben werden, bevor man sie druckt. Keine Ahnung warum, aber nachdem ich ein kleines JFrame am Bildschirm ausgebe, funktioniert alles wie gewollt und der Drucker spuckt auch den Inhalt aus.


Trotzdem vielen Dank für eure Hilfe :toll:

Grüße
Olli123


----------



## André Uhres (18. Apr 2011)

Olli123 hat gesagt.:


> die Tabelle muss erst als JFrame auf den Bildschirm ausgegeben werden, bevor man sie druckt.



Hallo Olli,

das Drucken funktioniert auch mit einer unsichtbaren JTable: wenn du mit setSize die Grösse einstellst und mit TableColumn#setWidth die Spaltenbreite, dann kannst du sie drucken, obwohl sie unsichtbar ist. Zusätzlich kannst du mit getTableHeader().setSize die Spaltenüberschrift drucken:

```
table.setSize(300,1500);
table.getTableHeader().setSize(300,30);//mit Spaltenüberschrift
table.getColumnModel().getColumn(0).setWidth(300);
```

Gruß,
André


----------

