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?
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…
mchiareli
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…
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:
publicclassBlockingGlassPaneextendsJPanel{publicBlockingGlassPane(){setOpaque(false);addMouseListener(newMouseAdapter(){});}protectedvoidpaintComponent(Graphicsg){Graphics2Dg2=(Graphics2D)g.create();// fill the component with the translucent colorg2.setColor(newColor(0,0,0,128));g2.fillRect(0,0,getWidth(),getHeight());g2.dispose();}}
para utilizar em um jframe por exemplo basta fazer:
BlockingGlassPane glass = new BlockingGlasspane();
setGlassPane(glass);
glass.setVisible(true);
para desbloquear basta:
glass.setVisible(false);
obs: Ele bloqueia os eventos do mouse
R
RaphaelSantos
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:
publicclassBlockingGlassPaneextendsJPanel{publicBlockingGlassPane(){setOpaque(false);addMouseListener(newMouseAdapter(){});}protectedvoidpaintComponent(Graphicsg){Graphics2Dg2=(Graphics2D)g.create();// fill the component with the translucent colorg2.setColor(newColor(0,0,0,128));g2.fillRect(0,0,getWidth(),getHeight());g2.dispose();}}
para utilizar em um jframe por exemplo basta fazer:
BlockingGlassPane glass = new BlockingGlasspane();
setGlassPane(glass);
glass.setVisible(true);
para desbloquear basta:
glass.setVisible(false);
obs: Ele bloqueia os eventos do mouse
em que parte exatamente ficaria esse codigo?
BlockingGlassPane glass = new BlockingGlasspane();
setGlassPane(glass);
glass.setVisible(true);
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()???
R
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…
R
RaphaelSantos
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…
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…