JRViewer зависает при отображении полностраничных изображений - PullRequest
1 голос
/ 16 декабря 2011

Я использую JasperViewer для отображения отчета внутри настольного Java-приложения. Отчет состоит из 2 страниц - каждая из них представляет собой изображение.

Проблема в том, что когда пользователь прокручивает страницу внутри программы просмотра, возникают огромные зависания. Размер изображения не такой большой, около 1000х1000.

Изображение генерируется следующим образом:

private BufferedImage createImage(Component panel) {
    int w = (int) panel.getSize().getWidth();
    int h = (int) panel.getSize().getHeight();
    BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = bi.createGraphics();
    panel.paint(g);
    g.dispose();
    return bi;
}

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Проблема решена.В JRViewer есть параметр:

//Maximum size (in pixels) of a buffered image that would be used by {@link JRViewer JRViewer} to render a report page.
//If rendering a report page would require an image larger than this threshold
//(i.e. image width x image height > maximum size), the report page will be rendered directly on the viewer component.
//If this property is zero or negative, buffered images will never be user to render a report page.
//By default, this property is set to 0.
public static final String VIEWER_RENDER_BUFFER_MAX_SIZE

Итак, если этот параметр установлен, отчеты отображаются как ImageIcon на JLabel.В противном случае он рисуется с использованием JRGraphics2DExporter, что намного медленнее при работе с большими изображениями.

Поэтому решение состоит в том, чтобы установить указанное свойство в файле свойств или следующим образом:

2 голосов
/ 16 декабря 2011

У вас есть два варианта

1) поставить изображение как Значок до JLabel

2) для Swing JComponets есть paintComponent() вместо paint(),

  • пожалуйста, прочитайте учебник о Графика

  • тонн примеровна этом форуме (Swing отмечен)

...