2011-11-19 2 views
0

응용 프로그램은 정보를 가져 와서 데이터베이스에서 양식을 채우거나이 양식에서 데이터베이스에 쓸 수 있습니다. 지금 당장 Netbeans를 사용하여 MySQL 테스트 서버에 접속할 수 있습니다.프린터에 JFrame 정보 보내기

내가 겪고있는 문제는 사무실에서 현재 사용하고있는 손으로 작성한 양식과 일치시키기 위해 데이터베이스가 아닌 테이블과 같은 형식으로 데이터베이스에서 얻은 정보를 인쇄해야한다는 것입니다. 사용자가 볼 수 있도록 화면에 배치 된 것처럼 전체 JFrame 또는 JFrame의 모든 내용을 인쇄하는 방법이 있습니까?

내가 지금까지 본 모든 것은 화면 영역 (텍스트 상자)을 인쇄하거나 테이블을 통해 인쇄합니다.

응용 프로그램은 모든 것이 완료되고 완료 될 때 Linux와 Windows 용으로 컴파일됩니다.

코드 :. JTable API에서

package Information; 

import java.awt.print.*; 
import java.awt.*; 
import javax.swing.*; 

public class HATDB extends javax.swing.JFrame implements Printable { 

    JFrame frameToPrint; 

    /** Creates new form HATDB */ 
    public HATDB() { 
    } 

    @Override 
    public int print(Graphics g, PageFormat pf, int page) throws 
     PrinterException { 

     if (page > 0) { /* We have only one page, and 'page' is zero-based */ 
      return NO_SUCH_PAGE; 
     } 

     /* User (0,0) is typically outside the imageable area, so we must 
     * translate by the X and Y values in the PageFormat to avoid clipping 
     */ 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.translate(pf.getImageableX(), pf.getImageableY()); 

     /* Now print the window and its visible contents */ 
     frameToPrint.printAll(g); 

     /* tell the caller that this page is part of the printed document */ 
     return PAGE_EXISTS; 
    } 

    public HATDB(JFrame f) { 
     frameToPrint = f; 
    } 

    private void OK_ButtonActionPerformed(java.awt.event.ActionEvent evt) { 
     PrinterJob job = PrinterJob.getPrinterJob(); 
     //job.setPrintable(); 
     boolean ok = job.printDialog(); 
     if (ok) { 
      try { 
       job.print(); 
      } catch (PrinterException ex) { 
       ex.printStackTrace(System.err); 
      } 
     } 

    } 

    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 

     JFrame f = new JFrame("Print UI Example"); 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new HATDB().setVisible(true); 
      } 
     }); 
    } 
} 
+0

예. 다른 Java 구성 요소를 인쇄하는 것과 비슷한 JFrame을 인쇄 할 수 있지만 예쁜 인쇄물을 만들기 위해 최적화되지 않았습니다. 왜 이런 종류의 문제를 해결하기 위해이 유형의 프로그램이 만들어 졌으므로 JasperReports와 같은보고 도구를 사용하는 것이 좋을까요? –

+0

JasperReports를 사용하는 데 도움이되는 예나 방향이 있습니까? – Friendlyghost89

+0

음 ... Google이 다운되어 있어야한다고 생각하십니까? –

답변

3

: "J2SE 5는 일반적인 인쇄 요구에 편리하게 액세스를 제공하기 위해 JTable에 방법을 추가하는 간단한 새로운 print() 방법으로 지원을 인쇄 빠르고 쉽게 추가 할 수 있도록하여 신청." 이 메소드는 표시되는 행이 아닌 TableModel의 모든 행을 인쇄합니다.

부록 : 당신은 Printing the Contents of a User Interface 같이 화면에있는 정확하게 인쇄 할 수 있습니다, 또는 hereChapter 6 Continued: Advanced Printing에 표시된대로이의 TableModel의 전체 내용을 인쇄 할 수 있습니다.

부록 : 다음은 JTreeJPanel을 인쇄하는 예입니다.

import java.awt.*; 
import java.awt.event.*; 
import java.awt.print.*; 
import javax.swing.*; 

/** @see http://stackoverflow.com/questions/8192204 */ 
public class PrintTest extends JPanel implements Printable { 

    public PrintTest() { 
     this.setLayout(new GridLayout()); 
     JTree tree = new JTree(); 
     this.add(new JScrollPane(tree)); 
     for (int i = 0; i < tree.getRowCount(); i++) { 
      tree.expandRow(i); 
     } 
    } 

    @Override 
    public int print(Graphics g, PageFormat pf, int i) throws PrinterException { 
     if (i > 0) { 
      return NO_SUCH_PAGE; 
     } 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.translate(pf.getImageableX(), pf.getImageableY()); 
     PrintTest.this.printAll(g); 
     return Printable.PAGE_EXISTS; 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame f = new JFrame(); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       final PrintTest pt = new PrintTest(); 
       f.add(pt, BorderLayout.CENTER); 
       JButton b = new JButton(new AbstractAction("Print") { 

        @Override 
        public void actionPerformed(ActionEvent e) { 
         PrinterJob pj = PrinterJob.getPrinterJob(); 
         PageFormat pf = pj.pageDialog(pj.defaultPage()); 
         pj.setPrintable(pt, pf); 
         if (pj.printDialog()) { 
          try { 
           pj.print(); 
          } catch (PrinterException pe) { 
           pe.printStackTrace(System.err); 
          } 
         } 
        } 
       }); 
       JPanel p = new JPanel(); 
       p.add(b); 
       f.add(p, BorderLayout.SOUTH); 
       f.pack(); 
       f.setVisible(true); 
      } 
     }); 
    } 
} 
+0

간단한 인쇄 (전체 양식이 아닌 텍스트 상자 또는 표의 내용 인쇄)를 수행 할 수 있습니다. 내가 겪고있는 문제는 화면에 표시된대로 양식을 인쇄하려고한다는 것입니다. 그건 작동하지 않습니다. – Friendlyghost89

+0

위의 두 가지 방법에 대한 링크를 추가했습니다. – trashgod

+0

위의 설명과 같이 코드를 추가했는데 맞는지 아닌지 잘 모르겠다. (자바에 익숙하지 않다 ...) 나는 여기에 파일을 게시하는 방법을 모르므로 간단한 코드를 업로드하고있다. 프로그램을 조롱해라. – Friendlyghost89

관련 문제