Spec-Zone .ru
спецификации, руководства, описания, API
|
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
MessageFormat footer = new MessageFormat("Page - {0}");
Так как общее количество страниц в выводе не известно прежде, чем напечатать время, нет никакого способа определить формат нумерации как "Страница 1 5".
Печатающие режимы ответственны за масштабирование вывода и распространение его через страницы. Можно напечатать свою таблицу в одном из следующих режимов:
PrintMode.NORMAL
PrintMode.FIT_WIDTH
В NORMAL
режим таблица печатается в ее текущем размере. Если столбцы не соответствуют странице, они распространяются через дополнительные страницы согласно таблице ComponentOrientation
. В FIT_WIDTH
у режима таблица есть меньший размер, в случае необходимости, чтобы соответствовать всем столбцам на каждой странице. Отметьте, что и width и height масштабируются, чтобы обеспечить вывод того же самого формата изображения. В обоих распространениях строк режимов через многократные страницы последовательно с так многими строками на странице насколько возможно.
С использованием JTable
печать API Вы не должны заботиться о расположении и разбиении на страницы. Вы только должны определить соответствующие параметры к print
метод, такой как печать режима и текстового формата нижнего колонтитула (если Вы хотите вставить номер страницы в нижний колонтитул). Как демонстрирующийся ранее, можно определить номер страницы в своем нижнем колонтитуле включением "{0}"
в строке, данной MessageFormat
параметр нижнего колонтитула. В печатном выводе, {0} будет заменен текущим номером страницы.
Давайте смотреть на вызванный пример TablePrintDemo1
. Весь код для этой программы может быть найден в TablePrintDemo1.java
. Богатый GUI этого демонстрационного примера создается автоматически TablePrintDemo1
приложение.
NORMAL
режим.Всякий раз, когда запущенное сетью приложение пытается напечатать, Сеть Java Запускаются, раскрывается диалоговое окно безопасности то, чтобы просить, чтобы пользователь для разрешения напечатал. Чтобы продолжиться с печатью, пользователь должен принять запрос.
Отметьте, когда Вы снимаете флажок Interactive, сообщение появляется, который предупреждает пользователя о недостатке печати нев интерактивном режиме. Можно найти код печати в PrintGradesTable
метод. Когда вызвано, этот метод сначала получает набор выбранных опций от компонентов GUI и затем вызывает print
метод следующим образом.
boolean complete = gradesTable.print(mode, header, footer, showPrintDialog, null, interactive, null);
Значение, возвращенное print
метод тогда используется, чтобы показать или сообщение успеха или сообщение, говоря, что пользователь отменял печать.
Другая важная функция является таблицей, печатающей использование API табличных средств рендеринга. При использовании средств рендеринга таблицы API обеспечивает печатный вывод, который похож на таблицу на экране. Смотрите на последний столбец таблицы на экране. Это содержит пользовательские изображения, обозначающие переданное или отказавшее состояние каждого студента. Теперь смотрите на печатный результат. Можно видеть, что проверка и X меток выглядят одинаково.
Вот является изображение TablePrintDemo1 напечатанным результатом в FIT_WIDTH
режим.
TablePrintDemo2
пример основан на предыдущем демонстрационном примере и имеет идентичный интерфейс. Единственная разница находится в печатном выводе. Если Вы смотрите на TablePrintDemo1's напечатанный результат более внимательно, можно заметить, что проверка и X меток нечетки. TablePrintDemo2
пример показывает, как настроить таблицу, чтобы сделать изображения более различимыми в табличной распечатке. В этом демонстрационном примере, переопределенном getTableCellRendererComponent
метод узнает, печатается ли таблица и возвращает более четкие черно-белые изображения. Если таблица не печатается, она возвращает покрашенные изображения, которые можно видеть на экране.
Нажмите кнопку Launch, чтобы работать, 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
режим.
TablePrintDemo3
пример основан на двух предыдущих демонстрационных примерах. Этот пример показывает, как обеспечить специализированное Printable
реализация, обертывая значение по умолчанию Printable
с дополнительным художественным оформлением. У этого демонстрационного примера есть подобный интерфейс, но флажки Header и Footer отключаются, так как специализированный печатаемый объект обеспечит свой собственный заголовок и нижний колонтитул.
Нажмите кнопку Launch, чтобы работать, TablePrintDemo3, используя
Этот пример печатает таблицу в изображении буфера обмена. Вот изображение печатного результата в FIT_WIDTH
режим.
Весь код для этой программы может быть найден в 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 инстанцируют, это загружается, изображения должны были собрать изображение буфера обмена, вычисляют область, требуемую для изображения буфера обмена, вычисляют севшую область для таблицы, печатают таблицу в меньшую область, и собирают и печатают изображение буфера обмена.
Обратите внимание на гибкость кода, который собирает изображение буфера обмена относительно размера страницы. Код принимает во внимание фактические измерения страницы и соединяет вспомогательные изображения, расширяя некоторых из них по мере необходимости так, чтобы заключительное изображение буфера обмена соответствовало фактическому размеру страницы. Изображение ниже показывает вспомогательные изображения и указывает, как те изображения формируют окончательный результат.
Этот раздел перечисляет методы, определенные в JTable
class, которые позволяют Вам печатать таблицы.
Метод | Цель |
---|---|
|
Когда вызвано без параметров, выводит на экран диалоговое окно печати, и затем печатает эту таблицу в интерактивном режиме в FIT_WIDTH режим без заголовка или текста нижнего колонтитула. Возвраты true если пользователь продолжал печатать и false если пользователь отменял печать.Когда вызвано с полным комплектом параметров, печатает эту таблицу согласно указанным параметрам. Первый параметр определяет режим печати. Два MessageFormat параметры определяют текст нижнего колонтитула и заголовок. Первый булев параметр определяет, показать ли диалоговое окно печати или нет. Другой булев параметр определяет, напечатать ли в интерактивном режиме или нет. С двумя другими параметрами можно определить атрибуты печати и службу печати.Всякий раз, когда a PrintService параметр опускается, принтер значения по умолчанию будет использоваться. |
|
Возвраты a Printable для того, чтобы напечатать таблицу. Переопределите этот метод, чтобы получить специализированное Printable объект. Можно обернуть тот Printable объект в другого, чтобы получить различные разметки. |
Эта таблица приводит примеры, которые используют табличную печать и точки туда, где те примеры описываются.
Пример | Где Описано | Примечания |
---|---|---|
TablePrintDemo |
Как Использовать Таблицы | Демонстрирует основные характеристики в таблице, печатающей, такие как отображение диалога печати, и затем печать в интерактивном режиме в FIT_WIDTH режим с номером страницы как заголовок. |
TablePrintDemo1 |
Эта страница | Demostrates основы табличной печати и обеспечивает богатый GUI. Позволяет пользователю определять заголовок или текст нижнего колонтитула, выбирать режим печати, включать или выключать диалоговое окно печати, и избранную печать в интерактивном режиме или нев интерактивном режиме. |
TablePrintDemo2 |
Эта страница | Основанный на TablePrintDemo1, у этого примера есть идентичный интерфейс. Этот демонстрационный пример показывает, как настроить таблицу так, чтобы печатный результат смотрел по-другому по сравнению с таблицей, показываемой на экране. |
TablePrintDemo3 |
Эта страница | Этот демонстрационный пример показывает усовершенствованные табличные функции печати, такие как обертывание таблицы значения по умолчанию, печатаемой в другого печатаемого, чтобы получить различное расположение. |