Как сделать прямоугольник в графике прозрачным цветом? - PullRequest
19 голосов
/ 13 ноября 2011

Я пытаюсь нарисовать прямоугольник на своем приложении красным цветом, но мне нужно сделать его вроде прозрачным, чтобы компонент под ним все еще отображался. Однако я все еще хочу, чтобы какой-то цвет все еще показывал. Метод, где я рисую, следующий:

protected void paintComponent(Graphics g) {
    if (point != null) {
        int value = this.chooseColour(); // used to return how bright the red is needed

        if(value !=0){
            Color myColour = new Color(255, value,value );
            g.setColor(myColour);
            g.fillRect(point.x, point.y, this.width, this.height);
        }
        else{
            Color myColour = new Color(value, 0,0 );
            g.setColor(myColour);
            g.fillRect(point.x, point.y, this.width, this.height);
        }
    }
}

Кто-нибудь знает, как я могу сделать красный оттенок немного прозрачным? Мне не нужно, чтобы он был полностью прозрачным.

Ответы [ 2 ]

38 голосов
/ 13 ноября 2011
int alpha = 127; // 50% transparent
Color myColour = new Color(255, value, value, alpha);

См. Конструкторы Color , которые принимают 4 аргумента (int или float) для получения дополнительной информации.

1 голос
/ 13 ноября 2011

Попробуйте это:

protected void paintComponent(Graphics g) {
    if (point != null) {
        int value = this.chooseColour(); // used to return how bright the red is needed
        g.setComposite(AlphaComposite.SrcOver.derive(0.8f));

        if(value !=0){
            Color myColour = new Color(255, value,value );
            g.setColor(myColour);
            g.fillRect(point.x, point.y, this.width, this.height);
        }
        else{
            Color myColour = new Color(value, 0,0 );
            g.setColor(myColour);
            g.fillRect(point.x, point.y, this.width, this.height);
        }
        g.setComposite(AlphaComposite.SrcOver);

    }
}
...