Как распечатать одно содержимое JPanel?
У меня есть JPanel
с двумя ярлыками с картинками. Мне нужно напечатать это содержимое JPanel
. Пожалуйста, помогите мне. Как я могу напечатать только это содержимое JPanel
, так как у меня также есть разные компоненты на моем JFrame
, но мне просто нужно распечатать этот JPanel
.
Спасибо.
Ответы
Ответ 1
Вот образец для печати любого компонента Swing.
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
Простым способом сделать это будет реализация интерфейса Printable
(в java.awt.print
) и добавление указанного метода print
(он работает аналогично paint
-in здесь, вы можете указать, какие компоненты вы бы хотите нарисовать на печатной странице). И когда вы хотите на самом деле распечатать содержимое панели, получите экземпляр PrinterJob
и вызовите его метод setPrintable
, передав объект, который реализовал Printable
.
Тем не менее, это просто краткий обзор. Я бы рекомендовал взглянуть на учебник Sun по печати для получения дополнительной информации.
Ответ 3
просто отредактируйте и поместите имя своего фрейма, панели (jPanel1) и кнопки (печать).
'this' относится к классу JFrame (то есть мой класс расширяет javax.swing.JFrame) просто поместите ссылку на кадр вместо '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();
}