Возможно ли иметь полупрозрачные окна в Java 7, включая строку заголовка? - PullRequest
7 голосов
/ 09 сентября 2011

Относящиеся к этому вопросу: Является ли пример полупрозрачного окна учебных пособий по Java проблемой для тех, кто играет с jdk7?

с jdk1.6.0_26 Я, кажется, могу применить прозрачность к JFrame, но не так с jre7:

NativeException: java.awt.IllegalComponentStateException: рамка оформлена

ex (jruby scripting java, работает с jdk1.6, но не с jdk7):


require 'java'

class MouseDraw

  def self.go
    java_import 'javax.swing.JFrame'
    java_import 'com.sun.awt.AWTUtilities'

    f = JFrame.new
    AWTUtilities.set_window_opacity(f, 0.5)
    f.set_size 200,200
    f.show
  end

end
MouseDraw.go

Таким образом, мой вопрос «возможно ли иметь полупрозрачную строку заголовка в jdk7» (я хотел бы, чтобы прозрачное окно, которое я создаю, было перетаскиваемым / изменяющим размер)

Ответы [ 2 ]

8 голосов
/ 09 сентября 2011

Java 7 представила Window.setOpacity(), чтобы сделать то, что неофициальный класс AWTUtilities сделал в Java 6.

К сожалению, документально не работает с декорированными окнами:

Для установки значения непрозрачности, меньшего 1.0f, должны быть выполнены следующие условия:

(Акцент мой)

3 голосов
/ 14 сентября 2011

Увлекательно, если вы добавите

JFrame.setDefaultLookAndFeelDecorated(true);

Затем он позволяет вам перетаскивать, с заголовком JFrame (он просто использует уродливый внешний вид Java).

ref: Передача событий мыши приложениям позади пользовательского интерфейса Java

Теперь это странно.

Также обратите внимание, что вы можете «подделать» старое поведение, используя прозрачность на пиксель, см. http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html

так что вы можете иметь старое поведение как в java 6, так и в 7, но вам нужно будет создать специальный код вокруг него и сделать это в одну сторону, в другую - возможно, ...

...