Let's say I want to make the opacity of a JPanel %20 viewable? I don't mean setOpaque (draw or not draw) or setVisible (show or hide)... I mean make it see-through JPanel.. you know?
Is this possible?
panel.setBackground( new Color(r, g, b, a) );
Вам также следует взглянуть на Фоны с прозрачностью , чтобы понять любые проблемы с рисованием, которые могут возникнуть при использовании этого.
Используйте атрибут alpha для цвета.
Например:
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 );
Как насчет переопределения метода paintComponent в JPanel (для этого вам нужно создать подкласс самого JPanel и реализовать свой собственный метод paintComponent) внутри paintComponent, вы можете получить буферизованное изображение компонента, оттуда вы можете управлять альфа-каналом буферизованного изображения и закрашивать его обратно в JPanel. Я так давно покраснел. Все еще ищу код.
AWTUtilities.setWindowOpacity(aWindow, aFloat);
Где aWindow - это компонент Swing, а aFloat - это непрозрачность.