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



естественно, не работает - в данный момент на экране не потомок фрейма, а JDialog. Есть ли решение в этом случае?
...
Рейтинг: 0 / 0
07.06.2013, 11:17:23
    #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
07.06.2013, 12:21:55
    #38289976
Полуламер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать экрана
Blazkowicz , тысячекратно извиняюсь за поспешность + невнимательность, но тогда другая проблема - где же мне взять этот самый фрейм, родительский для диалога печати? Понимаю, что вопрос дурной, но самостоятельно его решить не получается.
...
Рейтинг: 0 / 0
07.06.2013, 12:31:44
    #38290003
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать экрана
Полуламер Blazkowicz , тысячекратно извиняюсь за поспешность + невнимательность, но тогда другая проблема - где же мне взять этот самый фрейм, родительский для диалога печати? Понимаю, что вопрос дурной, но самостоятельно его решить не получается.
Если юзеру не нужен диалог печати, то null.
Если нужен, то
http://docs.oracle.com/javase/6/docs/api/java/awt/Window.html#getOwner()
Надеюсь, свой JDialog вы создавали с указанием родительского фрейма?
Вообще имеет смысл хранить ссылку на корневой фрейм как глобальную переменную. Чтобы потом не искать, когда нужна.
...
Рейтинг: 0 / 0
07.06.2013, 13:25:51
    #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
07.06.2013, 13:36:59
    #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
07.06.2013, 14:21:52
    #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
07.06.2013, 14:30:50
    #38290308
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать экрана
Принер в ОС установлен?
...
Рейтинг: 0 / 0
07.06.2013, 14:53:16
    #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
07.06.2013, 14:54:57
    #38290380
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать экрана
Показывайте ваше сообщение на немецком.
...
Рейтинг: 0 / 0
07.06.2013, 15:09:23
    #38290430
Полуламер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать экрана
Уважаемый Blazkowicz , в надцатый раз приношу свои извинения в беспросветной тупости - только сейчас обнаружил, что из значащихся в списке принтеров не выбран тот, который используется в системе по умолчанию Стыдно, очень стыдно - после его отмечивания сразу появился вожделенный диалог печати Но тем не менее без Ваших объяснений про родительский фрейм и аттрибуты я бы так далеко не продвинулся, за что большое спасибо. Только бы теперь все получилось с печатью - уже неловко спрашивать на эту тему, терпение-то людское небеспредельно...
...
Рейтинг: 0 / 0
07.06.2013, 15:14:06
    #38290449
Полуламер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать экрана
Ух, вроде все нормально, только поля справа какие-то широкие, ну да это несущественно. Еще раз спасибо за помощь! :)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Печать экрана / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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