Faq створене в процесі розробки java-аплету, jazzteam software development company

Як використовувати параметри запуску аплета?

У наведеному вище прикладі в конструкцію "var parameters = <>; "Необхідно додати потрібні параметри. Наприклад,

У апплете параметри зчитуються в такий спосіб:

Такий спосіб так само працює при запуску аплета за допомогою тегів і .

Як створити скріншот Swing / AWT компонента?

Це можна зробити 2-ма способами. В обох випадках компонент повинен бути видимим.

Без використання робота:

З використанням робота:

В даному випадку буде зроблений скріншот області, в якій знаходиться компонент. Тобто якщо компонент перекриває вікно іншої програми, то в скріншот потрапить область стороннього вікна.

Як використовувати одночасно 2 аплету в одному браузері, якщо в них присутні static поля?

Для цього потрібно запускати аплети в різних JVM. Щоб запустити аплети в різних JVM потрібно запустити їх з параметром separate_jvm = true.

Як в Swing можна зробити поле для введення, яке динамічно розширюється при переповненні, а так само має мінімальний розмір?

Приклад такого JTextField:

Як реалізувати DragDrop в Swing?

В Java 6 з'явився досить зручний механізм для реалізації DragDrop, однак у нього є свої мінуси. Наприклад, необхідно явно вказувати Drop Target, що не дуже зручно, коли об'єкт необхідно покласти поруч з Drop Target'ом. Також в стандартній реалізації немає гарантії порядку виконання методів слухачів. Я розповім концепцію реалізації більш розширюється DragDrop.

Спочатку на все перетягують компоненти (Drag Source) необхідно призначити слухачів миші (Mouse Listener і MouseMotionListener). Необхідно реалізувати 3 методу: метод натискання миші на об'єкт, метод переміщення миші при затиснутій кнопці миші на об'єкті (mouseDragged в MouseMotionListener) і метод відпускання кнопки миші.

Виглядає призначення слухачів так:

Відповідно при натисканні миші на об'єкт стартує DragDrop, при переміщенні миші об'єкт повинен переміщатися, при відпуску кнопки миші об'єкт повинен змінити свої координати і переміститися на новий контейнер. Якщо переміщення об'єкта буде відбуватися тільки в межах одного контейнера, то можна реалізувати лише метод mouseDragged (). в якому будуть змінюватися координати перетягуваного об'єкта:

Але у перетягуваного об'єкта можна встановлювати координати щодо контейнера, на якому він знаходиться. Відповідно при переміщенні миші на інший контейнер необхідно додавати компонент на новий контейнер, вираховувати нові координати і т.д. Даний спосіб не дуже гарний і розширюваний, тому я пропоную використовувати GlassPane. для відображення перетягуваного об'єкта.

Алгоритм виходить приблизно такий:

  • Натискаємо на об'єкт.
  • Отримуємо скріншот об'єкта (як зробити скріншот см. Вище).
  • Ховаємо вихідний об'єкт.
  • Малюємо на glassPane скріншот об'єкта, грунтуючись на координатах миші.
  • При переміщенні миші перемальовували скріншот за новими координатами.
  • При відпуску кнопки миші кладемо об'єкт на контейнер, на який наведено курсор.
  • Відображаємо вихідний об'єкт.

При такому підході у нас немає зав'язки на контейнер, в який повинен потрапити курсор, щоб стався Drop і відповідно об'єкт можна "кидати" куди завгодно.


GlassPane з ефектом прозорості:

В даному відповіді розписаний лише концепт реалізації.

Як підписати аплет сертифікатом?