07. maj 2005 - 17:00Der er
4 kommentarer og 1 løsning
Udskrivning af JTable til printer
Hej,
Jeg har en række spørgsmål til udprintning fra Java.
1. Skal man kalde paint engang for hvert side man vil udskrive? 2. Hvis man returnere Printable.PAGE_EXISTS fra paint - bliver paint så kaldet igen? 3. Hvor mange gange kan man kalde paint ved at returnere Printable.PAGE_EXISTS 4. Kan man udskrive ting til en side hver gang paint bliver kaldt?
Tror jeg vil prøve at besvare alle 4 punkter på en gang, da det hele hænger sammen, nu skriver du godt nok "paint", men det er formentlig "print" du tænker på når vi snakker udskrivning.
For at forklare det, skal du prøve at forestille dig du udskriver til en printer med ekstrem lille hukommelse, java deler den side du vil have udskrevet op i nogle bånd. Lad os sige at din printer kun har hukommelse nok til 1 cm af en side (A4 = 29,7 cm), så vil java kalde din print metode 30 gange, 29 gange for de første 29 cm og 1 gang for de sidste 0,7 cm.
Java's holder selv styr på hvor mange bånd der er printet og hvor mange der mangler, du skal kun holde styr sideantal.
Jeg skal prøve om jeg kan nå at lave et eksempel i aften som skriver over flere sider, ellers bliver det først på mandag.
Perfekt - det ville være rigtig lækkert, fordi jeg må indrømme at der stadigvæk er lidt af en gåde for mig.
Ligenu udskriver jeg 30 linier med drawString første gange metoden print bliver kaldt, også returnere jeg Printable.PAGE.EXISTS. Metoder bliver kaldt igen, og der returneres igen Printable.PAGE.EXISTS, men print-metoden bliver nu ikke kaldt igen. Det er meget mærkeligt.
public class PrintTest extends javax.swing.JFrame implements Printable{
public PrintTest() { initComponents(); }
private void initComponents() { panel = new javax.swing.JPanel(); addRows = new javax.swing.JButton(); clearTbl = new javax.swing.JButton(); printRows = new javax.swing.JButton(); scroll = new javax.swing.JScrollPane(); table = new javax.swing.JTable();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); addRows.setText("Add rows to table"); addRows.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { fillTable(evt); } });
private void removeTblRows(java.awt.event.ActionEvent evt) { DefaultTableModel model = (DefaultTableModel)table.getModel(); int i = table.getRowCount() - 1; for(int x = i; x >= 0; x--) model.removeRow(x); }
// Hent papirformat som anvendes af default printer pageForm = job.defaultPage();
// Antal rækker i tabel, samt rækkehøjde rowHeight = table.getRowHeight(); rowCount = table.getRowCount();
// Højde på defaultpapir, samt antal rækker der kan være på papiret int printArea = (int) (pageForm.getImageableHeight()); rowsPerPage = (int)Math.floor((double)printArea / (double)rowHeight); numberOfPages = (int)Math.ceil((double)rowCount / (double)rowsPerPage );
private PrinterJob job; private PageFormat pageForm; private int numberOfPages; private int rowHeight; private int rowCount; private int rowsPerPage; }
Ja - men det er lige stillet lidt i bero indtil videre pga. eksamen, men jeg kan helt sikker bruge noget fra dit eksempel.
Tak for hjælpen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.