Java - установить непрозрачность в JPanel - PullRequest
16 голосов
/ 25 августа 2010

Допустим, я хочу сделать прозрачность JPanel% 20 видимой? Я не имею в виду setOpaque (рисовать или не рисовать) или setVisible (показывать или скрывать) ... Я имею в виду сделать его прозрачным для JPanel ... вы знаете?

Возможно ли это?

Ответы [ 6 ]

22 голосов
/ 25 августа 2010
panel.setBackground( new Color(r, g, b, a) );

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

13 голосов
/ 25 августа 2010

Используйте альфа-атрибут для цвета.

Например:

panel.setBackground(new Color(0,0,0,64));

Создаст черный цвет с 64 альфа (прозрачность)

В результате чего:

sample

Вот код

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 );

alt text

3 голосов
/ 25 августа 2010
AWTUtilities.setWindowOpacity(aWindow, aFloat);

Где aWindow - компонент Swing, а aFloat - непрозрачность.

0 голосов
/ 08 ноября 2017

Если у вас есть пользовательская панель и вы хотите, чтобы все это было полупрозрачным, я советую вам переопределить его метод paintComponent следующим образом:

@Override
    protected void paintComponent(Graphics graphics) {
        super.paintComponent(graphics);
        Graphics2D g2d = (Graphics2D) graphics;
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
    }
0 голосов
/ 25 марта 2011

Это не так хорошо работает на Windows 7.

panel.setBackground( new Color(r, g, b, a) );

альфа-канал просто осветляет цвет.

когда элемент обновляется в цвете с альфа-каналом, компьютер запутывается и сбрасывает фон обновленного элемента без альфа-канала. Я собираюсь попробовать

AWTUtilities.setWindowOpacity(aWindow, aFloat);

следующий.

0 голосов
/ 25 августа 2010

Как насчет переопределения метода paintComponent в JPanel (для этого вам нужно создать подкласс самого JPanel и реализовать свой собственный метод paintComponent) внутри paintComponent вы можете получить буферизованное изображение компонента, откуда вы можете манипулируйте альфой буферизованного изображения и рисуйте его обратно в JPanel. Я красный уже давно. Все еще ищу код.

...