2013-04-29 3 views
1

Итак, я написал небольшую программу для класса. Я разработал его как JApplet внутри неуправляемого JFrame, а не в браузере. Помимо этого, это простая программа рисования. Вы нажимаете две точки, чтобы нарисовать выбранные фигуры, затем называет перерисовку. Проблема, с которой я сталкиваюсь, заключается в том, что когда вы рисуете, когда программа была перенесена на мой вторичный монитор, весь JApplet, кажется, исчезает, только отображая рисованную фигуру. Он исчезает только после выбора 2-й точки, поэтому я полагаю, что она делает это на repaint().My JApplet исчезает при перемещении на дополнительный монитор

Мой вторичный монитор использует ту же марку и разрешение, даже цветовой профиль.

Любые другие технические детали, я использую Java 1.7 (не могу вспомнить, какое обновление у меня на голове), Windows 8 Enterprise 64x, используя кнопку запуска Eclipse для тестирования.

Заранее благодарим за любую помощь!

+0

* «Я разработал его как JApplet внутри неразделенного JFrame» * Это первое, что вам нужно исправить. Сделайте его в «JPanel», который затем можно добавить к неустановленному фрейму, окну или где-нибудь еще. Эта проблема звучит подозрительно, как приложение. вызывает 'getGraphics()' на компоненте. Если это правильно, тот же эффект можно увидеть при добавлении другого приложения. перед апплетом, а затем минимизируя приложение. Если это не так, отправьте сообщение [SSCCE] (http://sscce.org/) для получения дополнительных советов. –

+0

Спасибо, я попробую идею JPanel, хотя у меня также были проблемы при минимизации окна. Окно не декорировано, поэтому у меня нет доступа к кнопке «Свернуть», поэтому я нажимаю кнопку минимизации, которая использовала setState (JFrame.ICONIFIED), и работала достаточно хорошо, но не восстанавливала фрейм должным образом. Будет показывать только небольшой бар с заголовком и кнопками на нем. Возможно, JPanel тоже это исправит. Возможно. Anywho, попробует, результаты ждут. – OffLuffy

+0

Я имел в виду минимизировать приложение. то есть перед вашим апплетом! –

ответ

2

Я действительно вызываю getGraphics(); в методе init() JApplet.

В этом проблема. Объект Graphics - это переходная вещь, которая будет перекрашена в следующий раз, когда JVM подумает, что есть необходимость в этом. Это может быть вызвано:

  • Изменение размера или местоположения окна.
  • Покрытие его другой программой, а затем удаление приложения для покрытия.
  • Добавление новых компонентов или изменение отображаемых значений.

Для получения более подробной информации о том, как добиться того, чего вы пытаетесь достичь, см. В Performing Custom Painting. OTOH Swing имеет JLabel, который может показывать BufferedImage. Вы может использовать BufferedImage так, как вы хотите. Когда он будет обновлен, позвоните repaint() на ярлыке, чтобы увидеть эффект.

+0

Спасибо за помощь. Похоже, я склонен полностью перепроектировать программу с нуля, чтобы исправить некоторые из этих проблем. Было бы проще. Я совершенно неправильно использовал почти каждый компонент, который я вложил в это. Удивленный он работает в своем текущем состоянии. Java - довольно волшебная злонамеренная вещь. – OffLuffy

+0

+1 Интересный; другой монитор означает разные биты для компонента однорангового узла. – trashgod

Смежные вопросы