2009-04-15 37 views
19

Tôi có JPanel với hai nhãn có hình ảnh. Tôi cần in những nội dung này của JPanel. Hãy giúp tôi ra. Làm cách nào tôi có thể in chỉ nội dung của JPanel vì tôi cũng có các thành phần khác nhau trên JFrame nhưng tôi chỉ cần in nàyJPanel.Làm cách nào để in một nội dung của JPanel?

Cảm ơn.

Trả lời

21

Dưới đây là ví dụ để in bất kỳ thành phần Swing nào.

Nội dung này in nội dung của Component được gọi là componenet_name. Hãy chắc chắn rằng nó có thể nhìn thấy cho phương pháp này.

public void printComponenet(){ 

    PrinterJob pj = PrinterJob.getPrinterJob(); 
    pj.setJobName(" Print Component "); 

    pj.setPrintable (new Printable() {  
    public int print(Graphics pg, PageFormat pf, int pageNum){ 
     if (pageNum > 0){ 
     return Printable.NO_SUCH_PAGE; 
     } 

     Graphics2D g2 = (Graphics2D) pg; 
     g2.translate(pf.getImageableX(), pf.getImageableY()); 
     componenet_name.paint(g2); 
     return Printable.PAGE_EXISTS; 
    } 
    }); 
    if (pj.printDialog() == false) 
    return; 

    try { 
     pj.print(); 
    } catch (PrinterException ex) { 
     // handle exception 
    } 
} 
+2

cách bạn có thể chia tỷ lệ thành phần phù hợp trong trang sao cho phù hợp? –

+1

@Bạn đã bao giờ tìm ra cách để làm điều này? Cảm ơn –

+0

bạn có thể vui lòng thêm giải thích thêm (văn bản)? Là một trong những nghĩa vụ phải lấy được một JComponent và thêm phương pháp này hoặc những gì sẽ làm với điều này? Cảm ơn bạn. –

4

Một cách đơn giản để làm điều đó sẽ được thực hiện giao diện Printable (trong java.awt.print) và thêm các quy định print phương pháp (nó hoạt động tương tự như paint -in đây, bạn có thể xác định những thành phần bạn muốn vẽ lên trang in). Và khi bạn muốn thực sự in nội dung của bảng điều khiển, hãy lấy ví dụ PrinterJob và gọi phương thức setPrintable của nó, chuyển đối tượng đã triển khai Printable.

Đó chỉ là tổng quan nhanh. Tôi khuyên bạn nên xem Sun's tutorial on printing để biết thêm thông tin.

0

chỉ cần chỉnh sửa và đặt tên khung, bảng điều khiển (jPanel1) và nút (in). 'this' dùng để chỉ lớp JFrame (tức là lớp của tôi mở rộng javax.swing.JFrame) chỉ cần đặt tham chiếu khung của bạn thay vì 'this'.

private void PritnActionPerformed(java.awt.event.ActionEvent evt) { 
    // TODO add your handling code here: 
    Toolkit tkp = jPanel1.getToolkit(); 
    PrintJob pjp = tkp.getPrintJob(this, null, null); 
    Graphics g = pjp.getGraphics(); 
    jPanel1.print(g); 
    g.dispose(); 
    pjp.end(); 
} 
Các vấn đề liên quan