Как я могу распечатать содержимое одного JPanel? - PullRequest
19 голосов
/ 15 апреля 2009

У меня есть JPanel с двумя ярлыками с картинками. Мне нужно распечатать это содержание JPanel. Пожалуйста, помогите мне. Как я могу распечатать только это содержимое JPanel, так как на моем JFrame также есть различные компоненты, но мне просто нужно напечатать this JPanel.

Спасибо.

Ответы [ 3 ]

23 голосов
/ 15 апреля 2009

Вот пример печати любого компонента Swing.

public void printComponenet(Component component){
  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());
      component.paint(g2);
      return Printable.PAGE_EXISTS;
    }
  });
  if (pj.printDialog() == false)
  return;

  try {
        pj.print();
  } catch (PrinterException ex) {
        // handle exception
  }
}
4 голосов
/ 15 апреля 2009

Простой способ сделать это - реализовать интерфейс Printablejava.awt.print) и добавить указанный метод print (он работает аналогично paint) - здесь вы можете указать, какие компоненты вы бы хотели хочу нарисовать на печатной странице). И когда вы действительно хотите напечатать содержимое панели, получите экземпляр PrinterJob и вызовите его метод setPrintable, передав объект, который реализовал Printable.

Это всего лишь краткий обзор. Я бы порекомендовал взглянуть на учебник Sun по печати для получения дополнительной информации.

0 голосов
/ 21 июня 2013

просто отредактируйте и введите название вашего фрейма, панели (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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...