Плавающий прямоугольник на экране - PullRequest
1 голос
/ 17 июня 2009

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

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

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

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

Ответы [ 4 ]

1 голос
/ 17 июня 2009

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

0 голосов
/ 17 июня 2009

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

AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
g2d.setComposite(ac);
g2d.drawImage(image, x, y, this);
0 голосов
/ 17 июня 2009

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

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

0 голосов
/ 17 июня 2009

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

...