Ответ 1
panel.setBackground( new Color(r, g, b, a) );
Вы также можете посмотреть Backgrounds With Transparency, чтобы понять любые проблемы с картинкой, которые могут возникнуть при использовании этого.
Скажем, я хочу сделать прозрачность JPanel %20 видимой? Я не имею в виду setOpaque (ничья или не рисовать) или setVisible (показать или скрыть)... Я имею в виду сделать это через JPanel.. вы знаете?
Возможно ли это?
panel.setBackground( new Color(r, g, b, a) );
Вы также можете посмотреть Backgrounds With Transparency, чтобы понять любые проблемы с картинкой, которые могут возникнуть при использовании этого.
Используйте альфа-атрибут для цвета.
Например:
panel.setBackground(new Color(0,0,0,64));
Создает черный цвет с 64 альфа (прозрачность)
В результате:
Здесь код
package test;
import javax.swing.*;
import java.awt.Color;
import java.awt.BorderLayout;
public class See {
public static void main( String [] args ){
JFrame frame = new JFrame();
frame.setBackground( Color.orange );
frame.add( new JPanel(){{
add( new JLabel("Center"));
setBackground(new Color(0,0,0,64));
}} , BorderLayout.CENTER );
frame.add( new JLabel("North"), BorderLayout.NORTH);
frame.add( new JLabel("South"), BorderLayout.SOUTH);
frame.pack();
frame.setVisible( true );
}
}
Без него это выглядит так:
setBackground( new Color( 0,0,0 ) ); // or setBackground( Color.black );
AWTUtilities.setWindowOpacity(aWindow, aFloat);
Где aWindow - компонент Swing, а aFloat - непрозрачность.
Как переопределить метод paintComponent JPanel (для этого вам нужно подклассифицировать сам JPanel и реализовать свой собственный метод paintComponent) внутри paintComponent вы можете получить буферизованное изображение компонента, оттуда вы можете манипулировать альфой буферизованного изображения и нарисовать его обратно на JPanel. Я давно был красным. Все еще ищете код.
Это не так хорошо работает на Windows 7.
panel.setBackground( new Color(r, g, b, a) );
альфа-канал просто осветляет цвет.
когда элемент обновляется цветом с альфа-каналом, компьютер запутывается и сбрасывает фон обновленного элемента без альфы. Я собираюсь попробовать
AWTUtilities.setWindowOpacity(aWindow, aFloat);
следующий.
Если у вас есть пользовательская панель и вы хотите, чтобы все было полупрозрачным, я советую вам переопределить свой метод paintComponent следующим образом:
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
Graphics2D g2d = (Graphics2D) graphics;
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
}