Як використовувати параметри запуску аплета?
У наведеному вище прикладі в конструкцію "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 з ефектом прозорості:
В даному відповіді розписаний лише концепт реалізації.