Quando vc vai desligar o computador e aparece um diloago com as opções (Windows, Gnome, Kde, no mac eu nao sei se tem)…
Ae a janela de dialogo fica normal, com cor, e a tela em segundo plano começa a ficar preto e branco… é possivel fazer algo semelhante com swing, vc abrir um dialogo e fazer o jframe do fundo preto e branco?
É complicado, mas acho que dá…
Se você tirar um print screen da tela, utilizar Jav2D para mostrar em tela cheia e ai mostrar um JDialog na frente, acho que assim dá…
O efeito você pode utilizar o ColorConvertOp.
O print screen faça assim:
BufferedImage screen = new Robot().createScreenCapture(new Rectangle(800,600));
Aí você terá uma imagem do seu desktop no momento em que você quer fazer o efeito, no caso uma tela com resolução 800x600.
É interessante essa sua idéia, é que não consigo te dizer o código já de cara, mas eu iria por este caminho…
entendi, não havia pensando nisso,
uma vez eu fiz algo parecido para simular uma janela transparente, eu tirava printscreen da tela, dava uma clareada na imagem para simular a transparecencia, e colocava de fundo no meu jdialog…olhando parecia realmente que era transparente a janela, mas havia alguns problemas, o jdialog precisa ser fixo na tela, pq a atualização da imagem nao tem um tempo de resposta bom, então fica dando “flick”, mas foi legal até…
vou ver se dessa maneira, vai ficar legal, deopis posto o resultado aki…
resolvi fazer de outra forma, não ficou exatamente como eu queria, mas ficou interessante o efeito.
criei um jpanel transparente e seto ele como glasspane, com isso posso utilizar qualquer cor para o bloqueio.
segue o código:
[code]public class BlockingGlassPane extends JPanel {
public BlockingGlassPane() {
setOpaque(false);
addMouseListener(new MouseAdapter() {
});
}
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g.create();
// fill the component with the translucent color
g2.setColor(new Color(0, 0, 0, 128));
g2.fillRect(0, 0, getWidth(), getHeight());
g2.dispose();
}
}[/code]
para utilizar em um jframe por exemplo basta fazer:
BlockingGlassPane glass = new BlockingGlasspane();
setGlassPane(glass);
glass.setVisible(true);
para desbloquear basta:
obs: Ele bloqueia os eventos do mouse
[quote=mchiareli]resolvi fazer de outra forma, não ficou exatamente como eu queria, mas ficou interessante o efeito.
criei um jpanel transparente e seto ele como glasspane, com isso posso utilizar qualquer cor para o bloqueio.
segue o código:
[code]public class BlockingGlassPane extends JPanel {
public BlockingGlassPane() {
setOpaque(false);
addMouseListener(new MouseAdapter() {
});
}
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g.create();
// fill the component with the translucent color
g2.setColor(new Color(0, 0, 0, 128));
g2.fillRect(0, 0, getWidth(), getHeight());
g2.dispose();
}
}[/code]
para utilizar em um jframe por exemplo basta fazer:
BlockingGlassPane glass = new BlockingGlasspane();
setGlassPane(glass);
glass.setVisible(true);
para desbloquear basta:
obs: Ele bloqueia os eventos do mouse
[/quote]
em que parte exatamente ficaria esse codigo?
BlockingGlassPane glass = new BlockingGlasspane();
setGlassPane(glass);
glass.setVisible(true);
no main?
Amigo, vi seu topico sobre o BlockingGlassPane …
achei interessante pq tava justamente querendo bloquear a tela,
o que acontece, meu programa é um programa que ler uma URL e envia por email o conteudo da mesma. por isso quando apertamos no botao envia, ele demora um pouco para enviar pq faz um processamento longo.
ai seto o
BlockingGlassPane glass = new BlockingGlasspane();
setGlassPane(glass);
glass.setVisible(true);
no inicio do actionPerformed mas ele só trava a tela no final, quando aparece a mensagem de MENSAGEM ENVIADA COM SUCESSO…
mas ele teria que travar antes justamente pro usuario nao ficar mexendo…
voce sabe o que ta acontecendo???
exemplo do meu codigo
public void actionPerformed(java.awt.event.ActionEvent e) {
try {
setGlassPane(glass);
glass.setVisible(true);
enviaEmailTo();
} catch (IOException e1) {
onde o metodo enviaEmailTo() no final tem o glass.setVisible(false)…
, logo ele nao deveria travar de inicio ja que o codigo esta antes do enviaEmailTo()???
Não necessáriamente cara…
Se seu enviaEmailTo tiver algum processamento que faça com que o swing não faça um “refresh” ele só irá aparecer no final mesmo…
Tenta fazer o mesmo que vc fez, mas colocando um for mto (mas mto mesmo) grande ao invés do enviaEmailTo… mesmo resultado…
Porq vc não coloca o enviaEmailTo numa Thread separada??
Isso deve resolver seu problema…
[quote=rodrigo.assumpcao]Não necessáriamente cara…
Se seu enviaEmailTo tiver algum processamento que faça com que o swing não faça um “refresh” ele só irá aparecer no final mesmo…
Tenta fazer o mesmo que vc fez, mas colocando um for mto (mas mto mesmo) grande ao invés do enviaEmailTo… mesmo resultado…
Porq vc não coloca o enviaEmailTo numa Thread separada??
Isso deve resolver seu problema…[/quote]
rodrigo, e como eu separaria as Threads??? no caso toda aplicação ja é uma thread ne? ou eu teria que criar 2 nesse caso??
caso seja apenas criar mais uma, onde eu criaria(em que parte do codigo)???
eu criaria usando new Thread(new Runnable() {
public void run() });
???
[quote=RaphaelSantos][quote=rodrigo.assumpcao]Não necessáriamente cara…
Se seu enviaEmailTo tiver algum processamento que faça com que o swing não faça um “refresh” ele só irá aparecer no final mesmo…
Tenta fazer o mesmo que vc fez, mas colocando um for mto (mas mto mesmo) grande ao invés do enviaEmailTo… mesmo resultado…
Porq vc não coloca o enviaEmailTo numa Thread separada??
Isso deve resolver seu problema…[/quote]
rodrigo, e como eu separaria as Threads??? no caso toda aplicação ja é uma thread ne? ou eu teria que criar 2 nesse caso??
caso seja apenas criar mais uma, onde eu criaria(em que parte do codigo)???
eu criaria usando new Thread(new Runnable() {
public void run() });
???[/quote]
Você pode usar a classe SwingWorker (texto sobre essa classe), ou a classe Task, do Swing App. Framework (JSR-296).