#java #&raphics #applet
#java #графика #апплет
Вопрос:
есть ли простой способ отключить двойную буферизацию в java-апплете при необходимости? У меня есть java-апплет, который отображает и анимирует музыкальную партитуру, поэтому мне нужна была двойная буферизация. Однако для учебных целей мне нужно распечатать этот апплет. Проблема в том, что до того, как я добавил буферизацию, вывод на принтер был векторным, поэтому я мог бы сделать его таким большим, как я хотел, и это выглядело бы гладко (а также использовать более дешевый тип черных чернил!), Но с двойной буферизацией вывод, конечно, представляет собой изображение, и при этом с довольно низким разрешением!
В принципе, мне нужно, чтобы тот же апплет использовал двойную буферизацию при вызове с параметром «display_tune», но чтобы при вызове с параметром «view_tune» сразу выводил графику с векторным выводом.
Любая помощь высоко ценится.
Ответ №1:
Вы могли бы попробовать, выполнив что-то вроде
yourComponent.setDoubleBuffered(false);
// your print code
yourComponent.setDoubleBuffered(true);
метод объявлен в JComponent
. Я использовал это решение для экспорта PNG из графика Юнга, и это сработало. Я не уверен, что Jun& переопределяет этот метод внутри своих компонентов на другой, но попытка не повредит..
Комментарии:
1. Спасибо вам обоим за ответ, вы оба, похоже, имеете в виду одно и то же, поэтому я нашел некоторую информацию apl.jhu.edu /~hall/java/Swin&-Tutorial/… о двойной буферизации. Мой опыт работы с Java ограничен. Я использую закадровое изображение, поэтому вместо &2d.DrawLine() и т.д. Я пишу offscreenIma&e.DrawLine(). Я предполагаю, что это не стандартная двойная буферизация, на которую вы ссылаетесь? Есть ли простой способ просто переименовать «&2d» в «offscreenIma&e», когда используется печатная версия апплета?
Ответ №2:
Вы должны глобально отключить двойную буферизацию, а не только для одного компонента. В Swin& есть нечто, называемое RepaintMana&er. Это позволяет вам включать и отключать двойную буферизацию.