| | |
JTables
Please support our Java advertiser: Programming Forums - DaniWeb Sister Site
![]() |
•
•
Join Date: Jun 2004
Posts: 609
Reputation:
Solved Threads: 8
Hi everyone,
I am currently trying to print a multipage JTable but the the thing is on the left hand side of the JTable does not have any grid lines and i have tried to draw a rectangle around the jTable before printing it but nothing is happening.
Another thing is that when the JTable goes on the next page for printing there are trailing grid lines on the previous page. I have tried clipping and translating it but nothing works.
You guys can try removing the painting of the Table Headers to get a clearer picture if you want
Here is the code with a mini test program so you guys can run the program and see what i mean
Basically i am trying to print a JTable with the option of table headers as a complete grid and withou any trainling lines
I know that 1.5 now has printing but i need to use this way of printing(i.e. by using the printable interface) for the program to suit a special kind of need
Any help is greatly appreciated
Thank You
Yous Sincerely
Richard West
I am currently trying to print a multipage JTable but the the thing is on the left hand side of the JTable does not have any grid lines and i have tried to draw a rectangle around the jTable before printing it but nothing is happening.
Another thing is that when the JTable goes on the next page for printing there are trailing grid lines on the previous page. I have tried clipping and translating it but nothing works.
You guys can try removing the painting of the Table Headers to get a clearer picture if you want
Here is the code with a mini test program so you guys can run the program and see what i mean
Java Syntax (Toggle Plain Text)
import java.awt.*; import java.awt.image.*; import java.io.*; import java.util.*; import java.awt.print.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; import javax.imageio.*; public class JTables2 implements ActionListener { JFrame fr = new JFrame ("Frame"); JButton Button12 = new JButton("Print"); DefaultTableModel TableModel1 = new DefaultTableModel(20, 30); //The below command line sets the table model to the JTable JTable Table1 = new JTable(TableModel1); JScrollPane ScrollPane1 = new JScrollPane(Table1, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); Dimension Size1 = new Dimension(); PrinterJob prnJob; PageFormat format; public void initialize () { Container pane = fr.getContentPane(); pane.setLayout(new FlowLayout()); fr.setSize(250,300); fr.setLocation(300,300); fr.setBackground(Color.lightGray); //The below command line must be set to false so that user //resizing is allowed Table1.setAutoCreateColumnsFromModel(false); Size1.width = 350; Size1.height = 250; ScrollPane1.setPreferredSize(Size1); Table1.setModel(TableModel1); Table1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); Table1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); pane.add(ScrollPane1); pane.add(Button12); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Button12.addActionListener(this); fr.pack(); fr.setVisible(true); } public void printData () { //This function prints the contents of the JTable StyledTextTableRenderer2 StyledTextTableRenderer1 = new StyledTextTableRenderer2(); StyledTextTableRenderer1.settable(Table1); try { //The below command line gets the printer job prnJob = PrinterJob.getPrinterJob(); if(format == null) { format = prnJob.defaultPage(); } //The below command line sets the printable interface and the //format for the page to be printed prnJob.setPrintable(StyledTextTableRenderer1, format); //The below command line calls the native print dialog if(prnJob.printDialog() == false) { return; } //The below command line prints out the document if the user clicked Ok prnJob.print(); } catch (PrinterException e) { } } public void actionPerformed(ActionEvent event) { JComponent b = (JComponent)event.getSource(); if(b == Button12) { printData(); fr.repaint(); } } public static void main(String args[]) { JTables2 a = new JTables2(); a.initialize(); } } class StyledTextTableRenderer2 implements Printable { JTable Table1 = new JTable(); 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 fontDesent = g2.getFontMetrics().getDescent(); //leave room for page number double pageHeight = pageFormat.getImageableHeight() - fontHeight; double pageWidth = pageFormat.getImageableWidth(); double tableWidth = (double)Table1.getColumnModel().getTotalColumnWidth(); double headerHeightOnPage = Table1.getTableHeader().getHeight(); double tableWidthOnPage = tableWidth; double oneRowHeight = (Table1.getRowHeight()+ Table1.getRowMargin()); int numRowsOnAPage = (int)((pageHeight-headerHeightOnPage)/ oneRowHeight); double pageHeightForTable = oneRowHeight * numRowsOnAPage; int totalNumPages= (int)Math.ceil(((double)Table1.getRowCount())/numRowsOnAPage); if(pageIndex>=totalNumPages) { Table1.setShowGrid(true); return NO_SUCH_PAGE; } g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); //bottom center g2.drawString("Page "+ (pageIndex+1), (int)pageWidth/2-35, (int)(pageHeight + fontHeight-fontDesent)); g2.translate(0f,headerHeightOnPage); g2.translate(0f,-pageIndex * pageHeightForTable); //If this piece of the table is smaller //than the size available, //clip to the appropriate bounds. if(pageIndex + 1 == totalNumPages) { int lastRowPrinted = numRowsOnAPage * pageIndex; int numRowsLeft = Table1.getRowCount() - lastRowPrinted; g2.setClip(0,(int)(pageHeightForTable * pageIndex), (int) Math.ceil(tableWidthOnPage), (int)Math.ceil(oneRowHeight * numRowsLeft)); } //else clip to the entire area available else { g2.setClip(0, (int)(pageHeightForTable*pageIndex), (int) Math.ceil(tableWidthOnPage), (int) Math.ceil(pageHeightForTable)); } //This is where i try to draw the rectangle around //the JTable g2.drawRect(0,(int)headerHeightOnPage,(int)tableWidthOnPage, (int)((pageHeightForTable)* Table1.getRowCount())); Table1.paint(g2); g2.translate(0f, pageIndex * pageHeightForTable); g2.translate(0f, -headerHeightOnPage); g2.setClip(0, 0, (int)Math.ceil(tableWidthOnPage),(int)Math.ceil(headerHeightOnPage)); Table1.getTableHeader().paint(g2); //paint header at top /* g2.translate(0f, pageIndex * pageHeightForTable); g2.setColor(Color.gray); g2.drawRect(0,0,(int)tableWidthOnPage, (int)((pageHeightForTable)* Table1.getRowCount())); */ System.out.println("" + pageHeightForTable); return Printable.PAGE_EXISTS; } public void settable(JTable table) { //This function gets the JTable and its table model Table1 = table; Table1.setShowGrid(false); } }
Basically i am trying to print a JTable with the option of table headers as a complete grid and withou any trainling lines
I know that 1.5 now has printing but i need to use this way of printing(i.e. by using the printable interface) for the program to suit a special kind of need
Any help is greatly appreciated
Thank You
Yous Sincerely
Richard West
Microsoft uses "One World, One Web, One Program" as a slogan.
Doesn’t that sound like "Ein Volk, Ein Reich, Ein Führer" to you, too?
— Eric S. Raymond
Tell me what type of software do you like and what would you pay for it
http://www.daniweb.com/techtalkforums/thread19660.html
Doesn’t that sound like "Ein Volk, Ein Reich, Ein Führer" to you, too?
— Eric S. Raymond
Tell me what type of software do you like and what would you pay for it
http://www.daniweb.com/techtalkforums/thread19660.html
•
•
Join Date: Jun 2004
Posts: 609
Reputation:
Solved Threads: 8
Hi everyone,
Thanks easter bunny for answering to my post but that link you posted was exactly the code that i used for the printing of the JTable. The thing is that i am trying to remove the scaling feature( a must for my needs). The thing is that on the left hand side of the JTable and on top of the JTable(if i remove painting of all headers there seems to be no rectangle drawn around it so i tried drwing my own rectangle and it does not seem to work and also there are trailing grid lines as the table goes to the next page.
Did you encounter this? What do you suggest is a good way of overcoming this? Do you have any other links similar to the one you have of printing multi-page JTable??
Any help is greatly appreciated
Thank You
Yours Sincerely
Richard West
Thanks easter bunny for answering to my post but that link you posted was exactly the code that i used for the printing of the JTable. The thing is that i am trying to remove the scaling feature( a must for my needs). The thing is that on the left hand side of the JTable and on top of the JTable(if i remove painting of all headers there seems to be no rectangle drawn around it so i tried drwing my own rectangle and it does not seem to work and also there are trailing grid lines as the table goes to the next page.
Did you encounter this? What do you suggest is a good way of overcoming this? Do you have any other links similar to the one you have of printing multi-page JTable??
Any help is greatly appreciated
Thank You
Yours Sincerely
Richard West
Microsoft uses "One World, One Web, One Program" as a slogan.
Doesn’t that sound like "Ein Volk, Ein Reich, Ein Führer" to you, too?
— Eric S. Raymond
Tell me what type of software do you like and what would you pay for it
http://www.daniweb.com/techtalkforums/thread19660.html
Doesn’t that sound like "Ein Volk, Ein Reich, Ein Führer" to you, too?
— Eric S. Raymond
Tell me what type of software do you like and what would you pay for it
http://www.daniweb.com/techtalkforums/thread19660.html
ok, i only got that link a couple of days ago at another forum. the other link they gave me was http://www.javaworld.com/javaworld/j...020-print.html. haven't tried any of it yet, so can't really tell if it worked for me.
just from what you say here, it sounds like it's printing outside the "printable area" (see link above).
i'm busy writing a stock issues program for work (if my boss likes it, we might just use it, else it will be for practise). i'll also need to print jtables, so as soon as i get it right, i'll show you what i did... oh, and i also need a printer... hmmm....
just from what you say here, it sounds like it's printing outside the "printable area" (see link above).i'm busy writing a stock issues program for work (if my boss likes it, we might just use it, else it will be for practise). i'll also need to print jtables, so as soon as i get it right, i'll show you what i did... oh, and i also need a printer... hmmm....
•
•
Join Date: Jun 2004
Posts: 609
Reputation:
Solved Threads: 8
Hi everyone,
Thanks please keep me posted at this forum on this thread.
Thank You
Yours Sincerely
Richard West
•
•
•
•
Originally Posted by Easter Bunny
i'll also need to print jtables, so as soon as i get it right, i'll show you what i did
Thank You
Yours Sincerely
Richard West
Microsoft uses "One World, One Web, One Program" as a slogan.
Doesn’t that sound like "Ein Volk, Ein Reich, Ein Führer" to you, too?
— Eric S. Raymond
Tell me what type of software do you like and what would you pay for it
http://www.daniweb.com/techtalkforums/thread19660.html
Doesn’t that sound like "Ein Volk, Ein Reich, Ein Führer" to you, too?
— Eric S. Raymond
Tell me what type of software do you like and what would you pay for it
http://www.daniweb.com/techtalkforums/thread19660.html
![]() |
Similar Threads
- Java Sun Programmer 1.4 Certification Exam HELP!!! (Java)
- Getting horizontal scrollbars in a JTable (Java)
- JTables (Java)
Other Threads in the Java Forum
- Previous Thread: new to web srevices
- Next Thread: Getting windows authentication
| Thread Tools | Search this Thread |
-xlint actionlistener android api applet application array arrays automation binary blackberry block bluetooth character chat class classes client code component consumer database desktop developmenthelp draw eclipse error event exception fractal ftp game givemetehcodez graphics gui html ide image input integer j2me j2seprojects java javac javaee javaprojects jmf jni jpanel julia lego linked linux list loop loops mac map method methods mobile netbeans newbie notdisplaying number online oracle page print printf problem program programming project properties recursion researchinmotion rotatetext rsa scanner screen server set singleton size sms sort sql string swing template textfields threads time title tree tutorial-sample update windows working






