Tag: awt

Criando janelas transparentes e com formas usando Java Swing/AWT

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

O resultado será:

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.

O resultado:

Espero que tenham gostado e até a próxima!

//Pontos X do polígono

Tirando Screen Shots com Java

Aqui mostrarei como fazer uma classe para tirar Screen shots .

Estava pensando com quão complexo seria fazer uma classe que tirasse screen shots do compulador local e o armazenasse em um arquivo. Perguntando ao tio “G” descobri a classe Robot, que possui o método createScreenCapture.

Agora mostrarei como implementar esta funcionalidade:

Robot robot = new Robot();
//Definindo o retângulo que será a área de captura da tela que, neste caso, será a tela inteira.
Rectangle rect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());

BufferedImage img = robot.createScreenCapture(rect);

Aqui definimos a área de captura e obtivemos um BufferedImage, que já é nossa imagem. Agora é só persisti-la no disco.

//Capturando o ImageWriter e ImageWriterParam
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next();
ImageWriteParam iwp = writer.getDefaultWriteParam();

//Definindo o modo de compressão e a qualidade
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwp.setCompressionQuality(1);

//Persistindo a imagem
writer.setOutput(new FileImageOutputStream(arquivo));

IIOImage iioimage = new IIOImage(img, null, null);

writer.write(null, iioimage, iwp);
writer.dispose();

Aqui capturamos o ImageWriter e ImageWriterParam para configurar o método de compressão e a qualidade da imagem.

Na linha 07 definimos a qualidade como 1, onde o valor varia de 0 (zero), maior compressão e menor qualidade, até 1 (um), menor compressão e maior qualidade. Em seguida persistimos o arquivo no HD.

Pronto! Simples, não?!.

Faça o download do exemplo aqui.

Até a próxima!

Neste caso será a tela inteira.

  • AdSense

  • Copyright © 1996-2010 André L. S.. All rights reserved.
    iDream theme by Templates Next | Powered by WordPress