"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como obter cantos transparentes em um retângulo arredondado com um ponteiro triangular?

Como obter cantos transparentes em um retângulo arredondado com um ponteiro triangular?

Publicado em 2024-11-12
Navegar:662

How to Achieve Transparent Corners in a Rounded Rectangle with a Triangular Pointer?

Cantos transparentes na borda com cantos arredondados

No código fornecido, a classe TextBubbleBorder pinta um retângulo arredondado com um ponteiro triangular na parte inferior . Entretanto, os cantos fora do retângulo se estendem um pouco, mostrando a cor de fundo do painel pai. Para obter cantos transparentes, modificamos o método paintBorder para incluir uma etapa adicional:

// Paint the BG color of the parent, everywhere outside the clip
// of the text bubble.
Component parent  = c.getParent();
if (parent!=null) {
    Color bg = parent.getBackground();
    Rectangle rect = new Rectangle(0,0,width, height);
    Area borderRegion = new Area(rect);
    borderRegion.subtract(area);
    g2.setClip(borderRegion);
    g2.setColor(bg);
    g2.fillRect(0, 0, width, height);
    g2.setClip(null);
}

Este código verifica se o componente tem um pai, recupera sua cor de fundo e cria um retângulo representando toda a região da borda. Em seguida, ele cria um objeto Area borderRegion que representa esse retângulo. Em seguida, ele subtrai a área que representa o balão de texto de borderRegion, criando uma Área chamada clip que representa a área fora do balão de texto.

Com clip, o código define a região de recorte para o objeto Graphics2D, preenche-o com a cor de fundo do pai e, em seguida, redefine a região de recorte para desenhar a própria borda. Isso garante que os cantos fora do retângulo arredondado fiquem transparentes, mostrando a cor de fundo do pai.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3