Transparência e Arraste de Janela no MAC OS

1 resposta
R

Caros,
Estou desenvolvendo uma aplicação que deve funcionar no Windows assim como no MAC. É uma aplicação que tem seu front-end totalmente customizado de maneira que não se deseja nem a barra do windows no topo do frame e nem o formato ‘quadrado’ convencional de uma janela.
Para isso estou usando a combinação:

  • setUndecorated(true);
  • AWTUtilities.setWindowOpaque(this, false);
  • Colocar um background com transparência com a cara e formato desejado

E o efeito é muito bom. Porém parece que justamente ao desabilitar estes itens, ocorre um efeito colateral restrito ao MAC OS:
Toda a janela e seus componentes ficam arrastáveis. E isso e um grande problema já que nesta janela temos scrollbars e sliders.
Isto significa que ao tentar arrastar o thumb de um slider, este se mantém fixo em relação ao slider/janela porém toda a janela é arrastada!!

Percebam que eu não sou o único tendo este problema. Fiz uma busca prévia no nosso amigo google e achei esta mesma questão ainda sem resposta:

Entenderam a questão?

Alguém sabe resolver isso ou teria alguma dica?

Grato!

1 Resposta

R

Encontei a resposta! Posto aqui para outros que tenham a mesma dúvida.
Existe uma ‘client property’ específica para o MAC OS chamada apple.awt.draggableWindowBackground. O padrão dela é false. Quando registrada como true, ela faz com que todo o frame se torne arrastável, e não apenas a barra de título. Mas causa o mesmo efeito colateral explicado acima.
A curiosidade é que ao utilizar o AWTUtilities.setWindowOpaque(frame, false); no MAC OS, e só no MAC OS, automaticamente esta ‘client property’ é registrada como true. Então quem quiser trabalhar com transparência em frame e quer compatibilidade com MAC OS, lebre-se de restaurar o draggableWindowBackground como false ao final.

O código fica assim:

setUndecorated(true);

AWTUtilities.setWindowOpaque(this, false);

getRootPane().putClientProperty(apple.awt.draggableWindowBackground, Boolean.FALSE);

Agora, como a janela está sem decoração e com transparência, não existe como arrasta-la. Mas este é o esperado. Agora é necessário implementar o arraste da janela ‘na unha’. Mas agora eu me viro.
Grato pela atenção dispensada e, em especial, para aqueles que gastaram algum tempo iniciando uma pesquisa para tentar me ajudar.

Abraços

Criado 25 de maio de 2011
Ultima resposta 26 de mai. de 2011
Respostas 1
Participantes 1