[RESOLVIDO] JFrame com transições

4 respostas Resolvido
java
D

Pessoal queria abrir um tópico aqui para discutir um pouco sobre o que não se fala tanto no java raiz(pelo menos não muito em foruns brasileiros).Eu tava pensando em criar uma transição smooth no meu programa, em que ao abrir o programa iria aparecer a tela de boas vindas, e lentamente ele iria desaparecer e logo depois surgir um outro JFrame.

Porém eu fuçei toda a internet,e achava varias coisas falando sobre o JavaFX, usando o scene builder e tudo mais, mas não encontrei muito a respeito desses codigos no java raiz, ja pensei em usar o paintComponent mas não sei trabalhar com transparência nele. Quem puder me dar uma luz ai de por onde começar a estudar agradeço :face_with_monocle:

4 Respostas

R
Solucao aceita

Fala Dalton, tudo certo? Cara, o JFrame tem um método bem legal que se chama:

Método: opacity,

Atributo: float,
onde 1.0 é o que vemos, com nenhuma transparência
e 0.0 é o mínimo, de total transparência.

Vamos pensar, você pode pegar o valor e fazer a contagem regressiva, a ideia é que fique assim:

OPACIDADE
1.0
0.9
0.8
0.7
....
FIM

Certo? OK, vamos fazer isso no código, se você simplesmente fizer isso:

float i = 1.0;
 while (i >= 0.1){
    i--;
 }

Ele vai imprimir

1.0
0.0

Pra arrumar isso vamos fazer de outro jeito:

double opacidade = 1.0;
 DecimalFormat df = new DecimalFormat("#.#");
 while (opacidade >= 0.1) {
     opacidade -= 0.1;
     System.out.println(Float.valueOf(df.format(opacidade)));
 }

Agora sim, vai certinho, mas está muito rápido, também não é interessante, pq vai fechar como se estivessemos usando o dispose, então vamos usar um Thread.sleep pra dar um intervalo entre cada setOpacity(x), e pra não estender muito esse texto, vamos usar uma Thread, pra o seu programa não travar e ficar parado até terminar o processo.

public void smoothJFrame() {
    new Thread() {
        @Override
        public void run() {

            double opacidade = 1.0;
            DecimalFormat df = new DecimalFormat("#.#");
            
            System.out.println("OPACIDADE");
            while (opacidade >= 0.1) {
                try {
                    opacidade -= 0.1;
                    System.out.println(Float.valueOf(df.format(opacidade)));
                    Thread.sleep(100);
                    setOpacity(Float.valueOf(df.format(opacidade)));

                    if (Float.valueOf(df.format(opacidade)) == 0.0) {
                        System.out.println("FIM");
                    }
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }

    }.start();
}

Esse 100 no Thread.sleep(); é o tempo de pausa, eu testei com 1000 (1 seg), mas fica parecendo um slide do power point, então se você quiser aumentar o tempo, é só aumentar o valor, se quiser diminuir o tempo, é só diminuir o valor.

Você pode fazer a chamada pro novo JFrame no IF que eu coloquei ali.

E por fim, a saída é:

run:
OPACIDADE
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0.0
FIM

EDIT:

Eu acabei nem pesquisando e também não sei como você está pesquisando, mas o Java Raiz é chamado de Java Swing. Estou dizendo isso apenas pra te ajudar nas suas pesquisas futuras. Isso é tanto nacionalmente falando, quanto internacionalmente.

Tamo junto.

R

Bom dia, fiz um teste em outra máquina e encontrei alguns problemas:

O computador está em pt-BR, então ao invés de imprimir 1.0, ele imprime 1,0. Pra arrumar iso de maneira simples é só alterar o Locale:

double opacidade = 1.0;
Locale.setDefault(new Locale("en", "US"));
DecimalFormat df = new DecimalFormat("#.#");

Outro ‘erro’, é que você só consegue fazer isso em um Frame sem decorações, ou seja:

setUndecorated(true);

Isso você consegue arrumar clicando com o botão direito no JFrame, propriedades, Undecorated.

Só marcar o checkbox. Pronto, ta pronto o sorvertinho :alien:.

D

Cara valeu por essa mini-aula de java ai, me ajudou muito, eu nem ao menos sabia que existia essa função no JFrame. Enfim programando e aprendendo, fico agradecido pelas suas dicas e serei mais atento na hora de pesquisar :laughing:

R

Tamo junto!!

Criado 26 de agosto de 2019
Ultima resposta 27 de ago. de 2019
Respostas 4
Participantes 2