2015-09-29 4 views
1

У меня есть JFrame, который содержит JPanel. Я хочу сделать рамку полностью прозрачной, а панель слегка прозрачной.Transparent JFrame

Я использую следующий код, чтобы сделать это:

frame.setBackground(new Color(0, 0, 0, 0)); 
panel.setBackground(new Color(51, 51, 51, 190)); 

Нужный эффект достигается, однако, когда я сделать JFrame прозрачным, используя этот метод, он искажает все остальные компоненты.

следующее изображение демонстрирует это лучше, чем я могу объяснить.

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

Что мне не хватает?

+1

Не использовать цвета на основе альфа с компонентами (работает хорошо для кадра) вместо этого вам нужно использовать setOpaque (false) и переопределить метод paintComponent панели и подделать его – MadProgrammer

+1

Для [пример] (http://stackoverflow.com/questions/32574630/set-jframe-background-transparent-but-show- содержание/32575548 # 32575548) и [пример] (http://stackoverflow.com/questions/29026419/using-frame-setbackground0-255-0-0-doesnt-work-with-linux/29028825#29028825) – MadProgrammer

+0

Может быть, шрифт сглаживания будет явно задан, когда решение MadProgrammer не поможет. Перед вызовом super.paintComponent или так: Graphics2D.setRenderingHint (RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); ' –

ответ

2

Однако, когда я делаю JFrame прозрачным, используя этот метод, он искажает все остальные компоненты.

Проблема заключается в том, что Swing считает, что компонент непрозрачен, поэтому сначала он не нарисовал фон, чтобы вы рисовали артефакты.

Отъезд Background With Transparency. Она имеет два простых решения:

  1. окрасить фон сами
  2. использовать контейнер обертки, чтобы сделать картину для вас