powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Печать экрана
15 сообщений из 15, страница 1 из 1
Печать экрана
    #38288806
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени! Как сохранить содержимое окна приложения в виде файла известно многим да и примеров в интернете немеряно. А можно ли одним нажатием кнопки в запущенном приложении сразу отправить текущий экран на принтер, минуя процесс записи в файл? Не подскажете, в какую сторону смотреть?
...
Рейтинг: 0 / 0
Печать экрана
    #38288810
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
PrintJob.getGraphics().drawImage(...)
...
Рейтинг: 0 / 0
Печать экрана
    #38289592
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
java.awt.Robot , если речь именно об экране, а дальше - как уже сказали.
...
Рейтинг: 0 / 0
Печать экрана
    #38289716
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моя проблема в том, что нужно распечатать не панель, а диалог. Классический пример
Код: java
1.
2.
            Toolkit tk = this.getToolkit();
            PrintJob pj = tk.getPrintJob(new Frame(), "", null);



естественно, не работает - в данный момент на экране не потомок фрейма, а JDialog. Есть ли решение в этом случае?
...
Рейтинг: 0 / 0
Печать экрана
    #38289745
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПолуламерМоя проблема в том, что нужно распечатать не панель, а диалог. Классический пример
Код: java
1.
2.
            Toolkit tk = this.getToolkit();
            PrintJob pj = tk.getPrintJob(new Frame(), "", null);



Чего вы всех путаете. JavaDoc для getPrintJob() читали вообще:??? Это не то что печатается. Это родительское окно для диалога печати, который будет показан юзеру.

RTFM:
frame - the parent of the print dialog. May be null if and only if jobAttributes is not null and jobAttributes.getDialog() returns JobAttributes.DialogType.NONE or JobAttributes.DialogType.COMMON.
...
Рейтинг: 0 / 0
Печать экрана
    #38289976
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz , тысячекратно извиняюсь за поспешность + невнимательность, но тогда другая проблема - где же мне взять этот самый фрейм, родительский для диалога печати? Понимаю, что вопрос дурной, но самостоятельно его решить не получается.
...
Рейтинг: 0 / 0
Печать экрана
    #38290003
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полуламер Blazkowicz , тысячекратно извиняюсь за поспешность + невнимательность, но тогда другая проблема - где же мне взять этот самый фрейм, родительский для диалога печати? Понимаю, что вопрос дурной, но самостоятельно его решить не получается.
Если юзеру не нужен диалог печати, то null.
Если нужен, то
http://docs.oracle.com/javase/6/docs/api/java/awt/Window.html#getOwner()
Надеюсь, свой JDialog вы создавали с указанием родительского фрейма?
Вообще имеет смысл хранить ссылку на корневой фрейм как глобальную переменную. Чтобы потом не искать, когда нужна.
...
Рейтинг: 0 / 0
Печать экрана
    #38290152
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжаю блуждать в трех соснах. Вот так вызывается диалог многострадальный диалог из родительской формы (ее класс JSplitPane):

Код: java
1.
2.
JInfoDlg dlg = new JInfoDlg((JFrame) SwingUtilities.getWindowAncestor(this), "Title"); 
dlg.setVisible(true);



Т.е. в качестве родительского фрейма передается главное окно приложения. Так выглядит конструктор:

Код: java
1.
2.
3.
4.
	public JInfoDlg(Frame owner, String title) {
		super(owner);
		initComponents();
   }



В диалоге есть кнопка Print, к ней привязан метод:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 private void printButtonActionPerformed(ActionEvent e) {
        try {
            Toolkit tk = this.getToolkit();
            Frame ff = (Frame)this.getOwner();
            PrintJob pj = tk.getPrintJob(ff, "", null);
            if (pj != null) {
             ...
                pj.end();
            }

        } catch (Exception e) {
          ...
        }

    }


Фрейм ff является отнюдь не пустым, этого прекрасно видно при дебаггинге, но при попытке getPrintJob генерируется ошибка java.lang.NullPointerException - точно так же как если бы вместо этого родительского Owner там стоял бы new Frame(). Кстати, если задать там null как первый параметр, то выдается сообщение об ошибке: "Фрейм не может быть null". Вроде сделал как Вы рекомендовали, но все равно не выходит.
...
Рейтинг: 0 / 0
Печать экрана
    #38290174
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это не пробовали переводить?
May be null if and only if jobAttributes is not null and jobAttributes.getDialog() returns JobAttributes.DialogType.NONE or JobAttributes.DialogType.COMMON.
если передавать null . То нужно указать аттрибуты, в которых будет
JobAttributes.DialogType.NONE или JobAttributes.DialogType.COMMON.
Вы вместо аттрибутов передаёте null. Передавайте аттрибуты.
...
Рейтинг: 0 / 0
Печать экрана
    #38290283
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изменил код следующим образом:

Код: java
1.
2.
3.
            JobAttributes attrs = new JobAttributes();
            attrs.setDialog(JobAttributes.DialogType.COMMON);
            PrintJob pj = tk.getPrintJob(ff, "", attrs, null);



Теперь ошибка не генерируется, но если установлено значение JobAttributes.DialogType.COMMON, то выдается системное сообщение: "Сервис печати не найден" или как-то так, не знаю, как звучит на английском, возможно, "PrintJob not found", у меня система немецкая. PrintJob после этого получает значение null и на этом работа метода благополучно заканчивается. Если установлено значение JobAttributes.DialogType.NONE, то никакого сообщения об отсутствующем сервисе печати не выдается, это единственное различие. Понимаю, что замучил тупыми чайничными вопросами да еще и в пятницу, но досадно - решение ведь совсем рядом, не хватает какой-то мелочи.
...
Рейтинг: 0 / 0
Печать экрана
    #38290308
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Принер в ОС установлен?
...
Рейтинг: 0 / 0
Печать экрана
    #38290377
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, только что проверил с помощью кода:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
            PrintService prnSvc = null;

    /* locate a print service that can handle it */
    PrintService[] pservices =
            PrintServiceLookup.lookupPrintServices(null, null);
    if (pservices.length > 0) {
        int ii=0;
        while(ii < pservices.length)
        {
            System.out.println("Named Printer found: "+pservices[ii].getName());
            if (pservices[ii].getName().endsWith("YourPrinterName")) {
                prnSvc = pservices[ii];
                System.out.println("Named Printer selected: " + pservices[ii].getName() + "*");
                break;
            }
          ii++;

        }
    }



- все показались поименно. Но они все они сетевые, т.е. на моем компьютере ни один не подключен напрямую, неужели из-за этого такая ерунда?
...
Рейтинг: 0 / 0
Печать экрана
    #38290380
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Показывайте ваше сообщение на немецком.
...
Рейтинг: 0 / 0
Печать экрана
    #38290430
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Blazkowicz , в надцатый раз приношу свои извинения в беспросветной тупости - только сейчас обнаружил, что из значащихся в списке принтеров не выбран тот, который используется в системе по умолчанию Стыдно, очень стыдно - после его отмечивания сразу появился вожделенный диалог печати Но тем не менее без Ваших объяснений про родительский фрейм и аттрибуты я бы так далеко не продвинулся, за что большое спасибо. Только бы теперь все получилось с печатью - уже неловко спрашивать на эту тему, терпение-то людское небеспредельно...
...
Рейтинг: 0 / 0
Печать экрана
    #38290449
Полуламер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух, вроде все нормально, только поля справа какие-то широкие, ну да это несущественно. Еще раз спасибо за помощь! :)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Печать экрана
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]