O AWT nos oferece uma gama de possibilidades quando falamos sobre manipulação de janelas. Hoje falarei sobre duas destas possibilidades com a classe AWTUtilities.
Deixando a janela transparente
Para deixar uma Window (JFrame, JDialog e etc) transparente, você deve usar o método AWTUtilities.setWindowOpacity. Este método recebe como parâmetro a janela que deve ser alterada e o grau de transparência, que varia entre 0 (zero) e 1, sendo 0 (zero) invisível e 1 totalmente visível.
JFrame window = new JFrame("Minha janela");
//70% de transparência
AWTUtilities.setWindowOpacity(window, .7f);
window.setSize(800,600);
window.setVisible(true);
Alterando a forma da janela
Para alterar a forma da janela você deve usar o método AWTUtilities.setWindowShape. Este método recebe como parâmetro a janela que deve ser alterada e a forma (java.awt.Shape) que a janela deverá assumir.
A forma mais eficiente de usar este método é através do componentResized(), pois você poderá recalcular o tamanho da janela para não deforma-la ou não perder os componentes de vista.
Aqui deixaremos nossa janela com a forma de um triângulo com 70% de transparência.
final JFrame window = new JFrame("Minha janela");
try {
//Adicionando o ComponentListener responsável pelo componentResized
window.addComponentListener(new ComponentAdapter(){
@Override
//implementando o método componentResized
public void componentResized(ComponentEvent e) {
int[] x = {0,400,800}; //Pontos X do polígono
int[] y = {600,0,600}; //Pontos Y do polígono
//Criaremos um triângulo de 800 x 600
Shape shape = new Polygon(x, y, 3);
AWTUtilities.setWindowShape(window, shape);
//com transparência de 70%
AWTUtilities.setWindowOpacity(window, 0.7f);
}
});
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
window.setUndecorated(true); //removendo barra de título
window.setSize(800,600);
window.setVisible(true);
Repare que invoquei o método setUndecorated( ) passando o valor true, este método é responsável por ocultar a barra de título (aquele com o ícone e os botões de maximizar, minimizar e fechar) que, se estiver visível, o método AWTUtilities.setWindowShape( ) não surtirá efeito.
Espero que tenham gostado e até a próxima!
//Pontos X do polígono



