Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Использование Других Функций Swing
Как Напечатать Таблицы
Домашняя страница > Создание GUI С JFC/Swing > Использование Других Функций Swing

Как Напечатать Таблицы

JTable class оказывает поддержку для того, чтобы напечатать таблицы. JTable печать API включает методы, которые позволяют Вам реализовывать и основные и усовершенствованные задачи печати. Для общих задач печати, когда Вы должны просто напечатать таблицу, использование print метод непосредственно. print у метода есть несколько форм с различными наборами параметра. Этот метод готовит Вашу таблицу, получает соответствие Printable объект, и отправляет это принтеру.

Если реализация по умолчанию Printable объект не удовлетворяет Ваши потребности, можно настроить расположение печати, переопределяя getPrintable метод, чтобы обернуть значение по умолчанию Printable или даже замените это в целом.

Самый легкий способ напечатать Вашу таблицу состоит в том, чтобы вызвать print метод без параметров. См. пример кода ниже.

try {
    boolean complete = table.print();
    if (complete) {
        /* show a success message  */
        ...
    } else {
        /*show a message indicating that printing was cancelled */
        ...
    }
} catch (PrinterException pe) {
    /* Printing failed, report to the user */
    ...
}

Когда Вы вызываете print метод без параметров, диалоговое окно печати выводится на экран, и затем Ваша таблица печатается в интерактивном режиме в FIT_WIDTH режим без заголовка или нижнего колонтитула. Пример кода ниже показывает print сигнатура метода с полным набором параметров.

boolean complete = table.print(JTable.PrintMode printMode,
                               MessageFormat headerFormat,
                               MessageFormat footerFormat, 
                               boolean showPrintDialog,
                               PrintRequestAttributeSet attr,
                               boolean interactive,
                               PrintService service);

Когда Вы вызываете print метод со всеми параметрами, Вы явно выбираете функции печати, такие как режим печати, заголовок и текст нижнего колонтитула, печатая атрибуты, целевую службу печати, и также показать ли диалоговое окно печати или нет, и напечатать ли в интерактивном режиме или нев интерактивном режиме. Чтобы решить, какие параметры удовлетворяют Вашим потребностям лучше всего, см. описание доступных функций ниже.

JTable печать API обеспечивает следующие функции:

Печать В интерактивном режиме или Нев интерактивном режиме

В интерактивном режиме диалоговое окно продвижения с опцией аварийного прекращения работы показывают для продолжительности печати. Вот выборка диалогового окна продвижения.

Снимок экрана печати прогрессирует диалоговое окно

Это диалоговое окно позволяет пользователю отследить печать продвижения. Диалоговое окно продвижения модально, что означает, что, в то время как его показывают на экране, пользователь не может взаимодействовать с таблицей. Важно, чтобы Ваша таблица осталась неизменной, в то время как это печатается, иначе поведение печати будет неопределено. Однако, печать в интерактивном режиме не блокирует код другого разработчика от изменения таблицы. Например, есть другой поток, который отправляет обновления, используя SwingUtilities.invokeLater метод. Поэтому, чтобы гарантировать корректное поведение печати, следует убедиться, что Ваш собственный код воздерживается от изменения таблицы во время печати.

Альтернативно, можно напечатать свою таблицу нев интерактивном режиме. В этом режиме печать сразу начинается на событии, диспетчеризируют поток, и полностью блокирует любые события, которые будут обработаны. С одной стороны этот режим надежно сохраняет таблицу против любых изменений, пока печать не делается. С другой стороны этот режим полностью лишает пользователя любого взаимодействия с GUI. Именно поэтому печать нев интерактивном режиме может только быть рекомендована, печатая из приложений с невидимым GUI.

Диалоговое окно печати

Можно вывести на экран стандартное диалоговое окно печати, которое позволяет пользователю делать следующее:

Снимок экрана диалогового окна печати

Можно заметить, что диалоговое окно печати не определяет общее количество страниц в распечатке. Это - то, потому что таблица, печатающая реализацию, использует Printable API и общее количество страниц не знаются заранее печати времени.

Добавление Заголовка или Нижнего колонтитула (или Оба) к Расположению Печати

Заголовками и нижними колонтитулами обеспечивают MessageFormat параметры. Эти параметры позволяют заголовку и нижнему колонтитулу быть локализованным. Считайте документацию для MessageFormat class, поскольку некоторые символы, такие как одинарные кавычки, являются особенными и должны избежаться. И заголовки и нижние колонтитулы центрируются. Можно вставить номер страницы при использовании {0}.

MessageFormat footer = new MessageFormat("Page - {0}");

Так как общее количество страниц в выводе не известно прежде, чем напечатать время, нет никакого способа определить формат нумерации как "Страница 1 5".

Печать Режимов

Печатающие режимы ответственны за масштабирование вывода и распространение его через страницы. Можно напечатать свою таблицу в одном из следующих режимов:

В NORMAL режим таблица печатается в ее текущем размере. Если столбцы не соответствуют странице, они распространяются через дополнительные страницы согласно таблице ComponentOrientation. В FIT_WIDTH у режима таблица есть меньший размер, в случае необходимости, чтобы соответствовать всем столбцам на каждой странице. Отметьте, что и width и height масштабируются, чтобы обеспечить вывод того же самого формата изображения. В обоих распространениях строк режимов через многократные страницы последовательно с так многими строками на странице насколько возможно.

Автоматическое Расположение и Разбиение на страницы

С использованием JTable печать API Вы не должны заботиться о расположении и разбиении на страницы. Вы только должны определить соответствующие параметры к print метод, такой как печать режима и текстового формата нижнего колонтитула (если Вы хотите вставить номер страницы в нижний колонтитул). Как демонстрирующийся ранее, можно определить номер страницы в своем нижнем колонтитуле включением "{0}" в строке, данной MessageFormat параметр нижнего колонтитула. В печатном выводе, {0} будет заменен текущим номером страницы.

Табличные Примеры Печати

Давайте смотреть на вызванный пример TablePrintDemo1. Весь код для этой программы может быть найден в TablePrintDemo1.java. Богатый GUI этого демонстрационного примера создается автоматически разработчиком GUI IDE NetBeans. Вот изображение TablePrintDemo1 приложение.

Снимок экрана TablePrintDemo1

Попробуйте это: 
  1. Нажмите кнопку Launch, чтобы работать, TablePrintDemo1, используя Сеть Java™ Запускаются (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.Запускает Приложение TablePrintDemo1
  2. У каждого флажка в нижней части окна приложения есть подсказка. Содержите курсор по флажку, чтобы узнать его цель.
  3. Отредактируйте текст во флажках Header или Footer или обоих, чтобы обеспечить различный заголовок или нижний колонтитул.
  4. Снимите флажки Header или Footer или обоих, чтобы выключить заголовок или нижний колонтитул.
  5. Снимите диалоговый флажок печати Шоу, чтобы выключить диалоговое окно печати.
  6. Очистите Подгонку width к печатному флажку страницы, чтобы выбрать печать в NORMAL режим.
  7. Очистите Интерактивное (Покажите диалоговое окно состояния), флажок, чтобы выключить диалоговое окно печати.
  8. Нажмите кнопку Print, чтобы напечатать таблицу согласно выбранным опциям.

Всякий раз, когда запущенное сетью приложение пытается напечатать, Сеть Java Запускаются, раскрывается диалоговое окно безопасности то, чтобы просить, чтобы пользователь для разрешения напечатал. Чтобы продолжиться с печатью, пользователь должен принять запрос.

Отметьте, когда Вы снимаете флажок Interactive, сообщение появляется, который предупреждает пользователя о недостатке печати нев интерактивном режиме. Можно найти код печати в PrintGradesTable метод. Когда вызвано, этот метод сначала получает набор выбранных опций от компонентов GUI и затем вызывает print метод следующим образом.

boolean complete = gradesTable.print(mode, header, footer,
                                     showPrintDialog, null,
                                     interactive, null);

Значение, возвращенное print метод тогда используется, чтобы показать или сообщение успеха или сообщение, говоря, что пользователь отменял печать.

Другая важная функция является таблицей, печатающей использование API табличных средств рендеринга. При использовании средств рендеринга таблицы API обеспечивает печатный вывод, который похож на таблицу на экране. Смотрите на последний столбец таблицы на экране. Это содержит пользовательские изображения, обозначающие переданное или отказавшее состояние каждого студента. Теперь смотрите на печатный результат. Можно видеть, что проверка и X меток выглядят одинаково.

Вот является изображение TablePrintDemo1 напечатанным результатом в FIT_WIDTH режим.

Напечатанный вывод от примера TablePrintDemo1
Это число было уменьшено, чтобы соответствовать на странице.
Нажмите на изображение, чтобы просмотреть это в его естественном размере.

Пример TablePrintDemo2

TablePrintDemo2 пример основан на предыдущем демонстрационном примере и имеет идентичный интерфейс. Единственная разница находится в печатном выводе. Если Вы смотрите на TablePrintDemo1's напечатанный результат более внимательно, можно заметить, что проверка и X меток нечетки. TablePrintDemo2 пример показывает, как настроить таблицу, чтобы сделать изображения более различимыми в табличной распечатке. В этом демонстрационном примере, переопределенном getTableCellRendererComponent метод узнает, печатается ли таблица и возвращает более четкие черно-белые изображения. Если таблица не печатается, она возвращает покрашенные изображения, которые можно видеть на экране.

Нажмите кнопку Launch, чтобы работать, TablePrintDemo2, используя Сеть Java™ Запускаются (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.

Запускает Приложение TablePrintDemo2

isPaintingForPrint метод, определенный в JComponent class позволяет нам настраивать то, что мы печатаем по сравнению с тем, что мы видим на экране. Код пользовательского средства рендеринга ячейки, взятого от TablePrintDemo2.java, упоминается ниже. Этот код выбирает который изображения использовать в зависимости от значения, возвращенного isPaintingForPrint метод.

    /**
     * A custom cell renderer that extends TablePrinteDemo1's renderer, to instead
     * use clearer black and white versions of the icons when printing.
     */
    protected static class BWPassedColumnRenderer extends PassedColumnRenderer {
            public Component getTableCellRendererComponent(JTable table,
                                                           Object value,
                                                           boolean isSelected,
                                                           boolean hasFocus,
                                                           int row,
                                                           int column) {

            super.getTableCellRendererComponent(table, value, isSelected,
                                                hasFocus, row, column);

            /* if we're currently printing, use the black and white icons */
            if (table.isPaintingForPrint()) {
                boolean status = (Boolean)value;
                setIcon(status ? passedIconBW : failedIconBW);
            } /* otherwise, the superclass (colored) icons are used */

            return this;
        }
    }

Вот является изображение TablePrintDemo2 напечатанным результатом в FIT_WIDTH режим.

Печатный вывод примера TablePrintDemo2
Это число было уменьшено, чтобы соответствовать на странице.
Нажмите на изображение, чтобы просмотреть это в его естественном размере.

Пример TablePrintDemo3

TablePrintDemo3 пример основан на двух предыдущих демонстрационных примерах. Этот пример показывает, как обеспечить специализированное Printable реализация, обертывая значение по умолчанию Printable с дополнительным художественным оформлением. У этого демонстрационного примера есть подобный интерфейс, но флажки Header и Footer отключаются, так как специализированный печатаемый объект обеспечит свой собственный заголовок и нижний колонтитул.

Нажмите кнопку Launch, чтобы работать, TablePrintDemo3, используя Сеть Java™ Запускаются (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.

Запускает Приложение TablePrintDemo3

Этот пример печатает таблицу в изображении буфера обмена. Вот изображение печатного результата в FIT_WIDTH режим.

Печатный вывод примера TablePrintDemo3
Это число было уменьшено, чтобы соответствовать на странице.
Нажмите на изображение, чтобы просмотреть это в его естественном размере.

Весь код для этой программы может быть найден в TablePrintDemo3.java. В этом демонстрационном примере, пользовательском подклассе JTable class используется вызванный FancyPrintingJTable. Это FancyPrintingJTable class переопределяет getPrintable метод, чтобы возвратить пользовательский печатаемый объект, который обертывает значение по умолчанию, печатаемое с его собственными художественными оформлениями и заголовком и нижним колонтитулом. Вот реализация getPrintable метод.

public Printable getPrintable(PrintMode printMode,
                              MessageFormat headerFormat,
                              MessageFormat footerFormat) {

     MessageFormat pageNumber = new MessageFormat("- {0} -");

     /* Fetch the default printable */
     Printable delegate = super.getPrintable(printMode, null, pageNumber);

     /* Return a fancy printable that wraps the default */
     return new FancyPrintable(delegate);
}

FancyPrintable class ответственен за то, что обернул значение по умолчанию печатаемый объект в другой печатаемый объект и установил изображение буфера обмена. Когда экземпляр этого class инстанцируют, это загружается, изображения должны были собрать изображение буфера обмена, вычисляют область, требуемую для изображения буфера обмена, вычисляют севшую область для таблицы, печатают таблицу в меньшую область, и собирают и печатают изображение буфера обмена.

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

Схема, показывающая, как вспомогательные изображения использовались в печатном выводе
Это число было уменьшено, чтобы соответствовать на странице.
Нажмите на изображение, чтобы просмотреть это в его естественном размере.

Табличный API Печати

Этот раздел перечисляет методы, определенные в JTable class, которые позволяют Вам печатать таблицы.

Метод Цель
булева печать ()
булева печать (printMode)
булева печать (printMode, MessageFormat, MessageFormat)
булева печать (printMode, MessageFormat, MessageFormat, булев, PrintRequestAttributeSet, булев)
булева печать (printMode, MessageFormat, MessageFormat, булев, PrintRequestAttributeSet, булев, PrintService)
Когда вызвано без параметров, выводит на экран диалоговое окно печати, и затем печатает эту таблицу в интерактивном режиме в FIT_WIDTH режим без заголовка или текста нижнего колонтитула. Возвраты true если пользователь продолжал печатать и false если пользователь отменял печать.
Когда вызвано с полным комплектом параметров, печатает эту таблицу согласно указанным параметрам. Первый параметр определяет режим печати. Два MessageFormat параметры определяют текст нижнего колонтитула и заголовок. Первый булев параметр определяет, показать ли диалоговое окно печати или нет. Другой булев параметр определяет, напечатать ли в интерактивном режиме или нет. С двумя другими параметрами можно определить атрибуты печати и службу печати.
Всякий раз, когда a PrintService параметр опускается, принтер значения по умолчанию будет использоваться.
Печатаемый getPrintable (PrintMode, MessageFormat, MessageFormat) Возвраты a Printable для того, чтобы напечатать таблицу. Переопределите этот метод, чтобы получить специализированное Printable объект. Можно обернуть тот Printable объект в другого, чтобы получить различные разметки.

Примеры Та Табличная Печать Использования

Эта таблица приводит примеры, которые используют табличную печать и точки туда, где те примеры описываются.

Пример Где Описано Примечания
TablePrintDemo Как Использовать Таблицы Демонстрирует основные характеристики в таблице, печатающей, такие как отображение диалога печати, и затем печать в интерактивном режиме в FIT_WIDTH режим с номером страницы как заголовок.
TablePrintDemo1 Эта страница Demostrates основы табличной печати и обеспечивает богатый GUI. Позволяет пользователю определять заголовок или текст нижнего колонтитула, выбирать режим печати, включать или выключать диалоговое окно печати, и избранную печать в интерактивном режиме или нев интерактивном режиме.
TablePrintDemo2 Эта страница Основанный на TablePrintDemo1, у этого примера есть идентичный интерфейс. Этот демонстрационный пример показывает, как настроить таблицу так, чтобы печатный результат смотрел по-другому по сравнению с таблицей, показываемой на экране.
TablePrintDemo3 Эта страница Этот демонстрационный пример показывает усовершенствованные табличные функции печати, такие как обертывание таблицы значения по умолчанию, печатаемой в другого печатаемого, чтобы получить различное расположение.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Как Использовать Модальность в Диалоговых окнах
Следующая страница: Как Напечатать текст