java - Print JLabel with JTable in desktop application -
how print jlabel jtable in java standalone application?
i have created gui in added label , 1 jable . want print gui. used table api print table. if print component content of table not visible.
i using netbeans ide 7.2
here code have used:
import java.awt.graphics; import java.awt.graphics2d; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.print.pageformat; import java.awt.print.printable; import java.awt.print.printerexception; import java.text.messageformat; import java.util.logging.level; import java.util.logging.logger; import javax.swing.joptionpane; import javax.swing.jtable; public class frm1 extends javax.swing.jinternalframe implements printable,actionlistener{ /** * creates new form frm1 */ public frm1() { initcomponents(); jbutton1.addactionlistener(this); } /** * method called within constructor initialize form. * warning: not modify code. content of method * regenerated form editor. */ @suppresswarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="generated code"> private void initcomponents() { jscrollpane1 = new javax.swing.jscrollpane(); jtable1 = new javax.swing.jtable(); jbutton1 = new javax.swing.jbutton(); jlabel1 = new javax.swing.jlabel(); jlabel2 = new javax.swing.jlabel(); jtable1.setmodel(new javax.swing.table.defaulttablemodel( new object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new string [] { "title 1", "title 2", "title 3", "title 4" } )); jscrollpane1.setviewportview(jtable1); jbutton1.settext("print"); jbutton1.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { jbutton1actionperformed(evt); } }); jlabel1.settext("to"); jlabel2.settext("abc"); javax.swing.grouplayout layout = new javax.swing.grouplayout(getcontentpane()); getcontentpane().setlayout(layout); layout.sethorizontalgroup( layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addgroup(layout.createsequentialgroup() .addgap(20, 20, 20) .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addcomponent(jscrollpane1, javax.swing.grouplayout.preferred_size, 367, javax.swing.grouplayout.preferred_size) .addcomponent(jbutton1) .addgroup(layout.createsequentialgroup() .addcomponent(jlabel1, javax.swing.grouplayout.preferred_size, 49, javax.swing.grouplayout.preferred_size) .addpreferredgap(javax.swing.layoutstyle.componentplacement.unrelated) .addcomponent(jlabel2))) .addcontainergap(18, short.max_value)) ); layout.setverticalgroup( layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addgroup(layout.createsequentialgroup() .addcontainergap(21, short.max_value) .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.baseline) .addcomponent(jlabel1) .addcomponent(jlabel2)) .addpreferredgap(javax.swing.layoutstyle.componentplacement.unrelated) .addcomponent(jscrollpane1, javax.swing.grouplayout.preferred_size, 188, javax.swing.grouplayout.preferred_size) .addgap(18, 18, 18) .addcomponent(jbutton1) .addcontainergap()) ); pack(); }// </editor-fold> private void jbutton1actionperformed(java.awt.event.actionevent evt) { messageformat format=new messageformat("abc "); try { jtable1.print(jtable.printmode.normal, format, format, iconable, null, isselected, null); // todo add handling code here: } catch(exception e){ joptionpane.showmessagedialog(rootpane, "error"); e.printstacktrace(); } } // variables declaration - not modify private javax.swing.jbutton jbutton1; private javax.swing.jlabel jlabel1; private javax.swing.jlabel jlabel2; private javax.swing.jscrollpane jscrollpane1; private javax.swing.jtable jtable1; // end of variables declaration @override public int print(graphics g, pageformat pf, int page) throws printerexception { if (page > 0) { /* have 1 page, , 'page' zero-based */ return no_such_page; } /* user (0,0) typically outside imageable area, must * translate x , y values in pageformat avoid clipping */ graphics2d g2d = (graphics2d)g; g2d.translate(pf.getimageablex(), pf.getimageabley()); /* print window , visible contents */ this.printall(g); /* tell caller page part of printed document */ return page_exists; } @override public void actionperformed(actionevent e) { try { jtable1.print(jtable.printmode.fit_width); } catch (exception ex) { ex.printstacktrace(); } } }
first create bufferedimage designed base panel or internal frame..
private bufferedimage createimage(jpanel panel) { int w = panel.getwidth(); int h = panel.getheight(); bufferedimage bi = new bufferedimage(w, h, bufferedimage.type_int_rgb); graphics2d g = bi.creategraphics(); panel.paint(g); return bi; }
pass object of bufferedimage graphicsobject of print api.
@override public int print(graphics g, pageformat pf, int page) throws printerexception { graphics2d g2d = (graphics2d)g; g2d.drawimage(createimage(this), 0, 0, null); g2d.dispose(); }
Comments
Post a Comment