2009-06-17 2 views
1

Я знаю, как нарисовать прямоугольник на JPanel, но как я могу нарисовать прямоугольник на экране, чтобы прямоугольник выглядел плавающим? Более конкретно, незаполненный прямоугольник. Моя мысль заключается в использовании прозрачного JFrame с прямоугольником, нарисованным на нем; однако это делает весь контент в JFrame прозрачным.Плавающий прямоугольник на экране

Мое решение Так что я думаю, что есть много способов обойти это, некоторые более сложные, чем другие, более практичные, чем другие.

Я попробовал заставку. Проблема заключается в том, что вам нужно передать параметры VM -splash при запуске. Я создал файл манифеста, чтобы автоматизировать это/поместить параметры в eclipse; но тогда код зависит от файла .gif, и я не могу легко изменить размер/положение прямоугольника. Подобные проблемы возникают при подделке изображения через скриншот экрана. Хорошие предложения, хотя, я узнал некоторые довольно классные вещи.

Итак, вернемся к тому, что я сделал. Я использовал JFrame, получил панель содержимого и установил фон в красный цвет (какой бы цвет вы ни пожелали), а затем установите кадр без декодирования, который удалит заголовок и границу окна. Это создало плавающий прямоугольник, который я мог бы легко изменить размер и расположение (frame.setSize, .setLocation). Я еще не сделал это незаполненным прямоугольником, я пробовал внутренние фреймы и слоистые панели, но не имел успеха.

+0

j6 имеет SplashScreen апите http://java.sun.com/developer/ technicalArticles/J2SE/Desktop/javase6/SplashScreen / –

ответ

0

Возможно, вам придется иметь части окна прозрачные, а фактический рисованный прямоугольник - нет. Я сомневаюсь, что для этого есть платформо-агностическое решение, поэтому вам нужно прибегнуть к JNI для этого. В зависимости от того, что вам нужно сделать, также может быть приятно сделать окно невидимым для кликов, которое также потребует других трюков.

0

https://github.com/twall/jna/

Этот проект предлагает библиотеку и имеет примеры тактовой и информационные воздушные шары, которые являются полупрозрачными и выходят за рамки даже то, что вы пытаетесь сделать. Демонстрации хорошо работают на Windows, но я не мог говорить о том, насколько они кросс-платформенные.

1

JFrame - тяжеловесный компонент, и они всегда были непрозрачными в течение самого долгого времени. Однако, так как Java 6u10, есть inofficial API для прозрачных окон в классе com.sun.awt.AWTUtilities, который, скорее всего, станет официальным в Java 7. В более ранних версиях, единственный способ для имитации такого рода вещи должен был fake it via screenshots взятый с java.awt.Robot

0

Возможно, вам стоит взглянуть на JLayeredPane. Демо на этой странице частично показывает, что вы хотите, однако, когда картина прямоугольника вам необходимо установить краску прозрачный:

AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f); 
g2d.setComposite(ac); 
g2d.drawImage(image, x, y, this); 
Смежные вопросы