Atualização da jlabel

14 respostas
mauricionik

pessoALL

Não sou só novo no forum, mas também no java e por isso estou pedindo a ajuda de vocês.
tenho um método que dá um setText em uma jLabel… eu sei q o texto atualiza mas como
chamo o método repedidamente e MUITO rápido ele não renderiza* para a interface gráfica.
Já pesquisei o problema e encontrei alguns artificios como criar um tick (que não deu certo)
e outras coisas que também não deram certo.
Portanto se alguém tiver uma boa dica que vá além do que vi no google. É a hora certa para compartilhar
este conhecimento ^^

  • apesar do termo “renderiza” é uma aplicação desktop.

Obrigado

14 Respostas

batista.gerson

mauricionik posta o codigo ai pra gente dar uma olhada

mauricionik

Segue o código abaixo…
a função que dá o set no texto é a última (atualizaBarraProgressoTitulo)
e tem comentadas algumas linhas que já fiz de teste porém não funcionaram
vale ressaltar que quando a ativade dessa função tem entre as chamdas um intervalo longo
± 4 segundos ela atualiza sem problemas MAS quando chamo mais rápido como em um loop
de listagem de arquivos de um diretório ela simplesmente para no primeiro e não exibe o resto.

obrigado pela colaboração.

/**

  • AtualizacaoUI.java
  • Tela que mostra o progresso da atualização
    */

import javax.swing.;
import java.awt.event.
;

public class AtualizacaoUI {

private static JLabel tituloAtualizadorVersao;
private static JLabel logoAprimora;
private static JPanel painelAtualizacao;
private static JPanel painelStatus;
private static JLabel statusAtualizacaoArquivos;
private static JLabel statusAtualizacaoBD;
private static JLabel statusInciarAprimora;
private static JLabel statusParaAprimora;
private static JLabel statusRecuperacaoAtividades;
private static JLabel barraProgessoTitulo;
private static JProgressBar barraProgresso;
private static JButton btnCancelar;

// Método construtor
public AtualizacaoUI() {

    construirAtualizacaoUI();
}

public AtualizacaoUI(String controle) {
}

/* construirAtualizacaoUI()
 * Gera a tela de status da atualização
 * @return JPane da tela de atualização
 */
public JPanel construirAtualizacaoUI() {

    painelAtualizacao = new JPanel();
    logoAprimora = new JLabel();
    tituloAtualizadorVersao = new JLabel();
    painelStatus = new JPanel();
    statusParaAprimora = new JLabel();
    statusAtualizacaoArquivos = new JLabel();
    statusAtualizacaoBD = new JLabel();
    statusInciarAprimora = new JLabel();
    barraProgessoTitulo = new JLabel();
    statusRecuperacaoAtividades = new JLabel();
    barraProgresso = new JProgressBar();
    btnCancelar = new JButton();

    painelAtualizacao.setBackground(new java.awt.Color(255, 255, 255));
    painelAtualizacao.setPreferredSize(new java.awt.Dimension(400, 286));

    logoAprimora.setIcon(new javax.swing.ImageIcon(getClass().getResource("logo_aprimora.png"))); // NOI18N

    tituloAtualizadorVersao.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
    tituloAtualizadorVersao.setText(AtualizadorUI.ATUALIZADOR_TITULO);

    painelStatus.setBackground(new java.awt.Color(255, 255, 255));
    painelStatus.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));

    statusParaAprimora.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
    statusParaAprimora.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_blank.JPG"))); // NOI18N
    statusParaAprimora.setText("Parar Aprimora.");

    statusAtualizacaoArquivos.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
    statusAtualizacaoArquivos.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_blank.JPG"))); // NOI18N
    statusAtualizacaoArquivos.setText("Atualização de arquivos.");

    statusAtualizacaoBD.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
    statusAtualizacaoBD.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_blank.JPG"))); // NOI18N
    statusAtualizacaoBD.setText("Atualização de banco de dados.");

    statusRecuperacaoAtividades.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
    statusRecuperacaoAtividades.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_blank.JPG"))); // NOI18N
    statusRecuperacaoAtividades.setText("Recuperação de atividades");

    statusInciarAprimora.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
    statusInciarAprimora.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_blank.JPG"))); // NOI18N
    statusInciarAprimora.setText("");

    barraProgresso.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
    barraProgresso.setValue(0);
    barraProgresso.setStringPainted(true);

    btnCancelar.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
    btnCancelar.setText("Cancelar");

    barraProgessoTitulo.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
    //propriedade da label de titulo.
    barraProgessoTitulo.setText("Status da atualização:");

    /* Ação do botão Cancelar
     * Função declarara na classe AtualizadorUI, instanciadora do botão
     */
    btnCancelar.addActionListener(new ActionListener() {

        public void actionPerformed(java.awt.event.ActionEvent evt) {
            AtualizadorUI.btnCancelarActionPerformed(evt);
        }
    });
    statusInciarAprimora.setVisible(true);

    /*Posicionamento dos componentes*/
    javax.swing.GroupLayout painelStatusLayout = new javax.swing.GroupLayout(painelStatus);
    painelStatus.setLayout(painelStatusLayout);
    
    painelStatusLayout.setHorizontalGroup(
                    /*Retorna o painel criado*/
    return painelAtualizacao;
}
public static void atualizaBarraProgresso(int valor) {
    barraProgresso.setValue(valor);
}
public static int getBarraProgressoValor(){
    return barraProgresso.getValue();
}

public void setStatusIniciarAprimora(int valor) {
    if (valor == 1){
        statusInciarAprimora.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_ok.JPG"))); // NOI18N
    } else {
        statusInciarAprimora.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_erro.gif"))); // NOI18N
    }
}
public void setStatusPararAprimora(int valor) {
    if (valor == 1){
        statusParaAprimora.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_ok.JPG"))); // NOI18N
    } else {
        statusParaAprimora.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_erro.gif"))); // NOI18N
    }
}
public void setStatusAtualizarArquivos(int valor) {
    if (valor == 1){
        statusAtualizacaoArquivos.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_ok.JPG"))); // NOI18N
    } else {
        statusAtualizacaoArquivos.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_erro.gif"))); // NOI18N
    }
}
public void setStatusAtualizarAtividades(int valor) {
    if (valor == 1){
        statusRecuperacaoAtividades.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_ok.JPG"))); // NOI18N
    } else {
        statusRecuperacaoAtividades.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_erro.gif"))); // NOI18N
    }
}
public void setStatusAtualizarBD(int valor) {
    if (valor == 1){
        statusAtualizacaoBD.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_ok.JPG"))); // NOI18N
    } else {
        statusAtualizacaoBD.setIcon(new javax.swing.ImageIcon(getClass().getResource("icone_erro.gif"))); // NOI18N
    }
}
public static void atualizaBarraProgressoTitulo(String texto){
    //JOptionPane.showMessageDialog(null, texto);
    barraProgessoTitulo.setText(texto);
    //barraProgessoTitulo.revalidate();
    //barraProgresso.repaint();
    //System.out.println(texto);
    //barraProgessoTitulo.repaint();
    //barraProgessoTitulo.updateUI();
    //barraProgessoTitulo.paintAll(barraProgessoTitulo.getGraphics());
}

}

batista.gerson

mauricionik tenta com getGraphics().

public static void atualizaBarraProgressoTitulo(String texto) { //JOptionPane.showMessageDialog(null, texto); barraProgessoTitulo.setText(texto); barraProgessoTitulo.paint(barraProgessoTitulo.getGraphics()); barraProgresso.repaint();

mauricionik

batista.gerson:
mauricionik tenta com getGraphics().

public static void atualizaBarraProgressoTitulo(String texto) { //JOptionPane.showMessageDialog(null, texto); barraProgessoTitulo.setText(texto); barraProgessoTitulo.paint(barraProgessoTitulo.getGraphics()); barraProgresso.repaint();

Quaaaase… ele fica imprimindo o texo sobre texto…
então coloquei
barraProgessoTitulo.setText(""); antes de barraProgessoTitulo.setText(texto);
mas mesmo assim ele continua imprimindo um sobre o outro.

mas já foi um progresso (:

ps.: q tag coloco para q o código postado fique formatado ? para facilitar vossa leitura ?

obrigado.

batista.gerson

tem uma tag "code"
e so colocar o codigo entre elas

ja progredimos vms fazer mais alguns teste.

mauricionik

batista.gerson:
tem uma tag code
e so colocar o codigo entre elas

Humm obrigado.
com relação a Jlabel tô começando a ler isto: http://www.guj.com.br/posts/list/86813.java
acho que o proble é semelhante.

//teste xD
batista.gerson

mauricionik quando eu postei

public static void atualizaBarraProgressoTitulo(String texto) {  
//JOptionPane.showMessageDialog(null, texto);  
        barraProgessoTitulo.setText(texto);  
        barraProgessoTitulo.paint(barraProgessoTitulo.getGraphics());  
        barraProgresso.repaint();

troca barraProgresso por barraProgessoTitulo

public static void atualizaBarraProgressoTitulo(String texto) {  
//JOptionPane.showMessageDialog(null, texto);  
        barraProgessoTitulo.setText(texto);  
        barraProgessoTitulo.paint(barraProgessoTitulo.getGraphics());  
        barraProgessoTitulo.repaint();

talvez seja por isso q ele ta desenhando um em cima do outro pq mandamos ele redesenhar o componente errado.

mauricionik

poxa… mesmo consertando meu erro continua com o problema…
mas agora imagino q este recurso consome memória porque o fundo inteiro da tela some
e não voltá até para as atualizações da label e ir para uma próxima janela.

maldito swing.
rsrsrsrs

batista.gerson

rsrs
mauricionik swing e um chute no saco.

mauricionik

batista.gerson:
rsrs
mauricionik swing e um chute no saco.

com os 2 pés.

ViniGodoy

Oi Mauricio.

Se quiser, te mostro como fazer isso amanhã, aí na Positivo. Só fale para o Rieke me chamar ali na minha sala.
E, ps: não pega bem deixar o nome do pacote da empresa num fórum público. :wink:

ViniGodoy

batista.gerson:
rsrs
mauricionik swing e um chute no saco.

Na verdade, ele é um dos frameworks mais poderosos, flexíveis e, por incrível que pareça, fáceis de trabalhar que já mexi.
Só que assim como programar para MVC exige que você aprenda um ou outro conceito antes de sair produzindo, o Swing também exige.

adrianoneres

Já fiz algo parecido, pra implementar um relógio digital que seria apresentado através de uma label. Utilizei threads pra alcançar esse comportamento de ficar atualizando a mesma label.

Mas posta a resolução aí quando estiver pronto, já que o Vini vai te ajudar pessoalmente. :slight_smile:

mauricionik

Muuuito bem Srs, graças a ajuda do Vini agora está funcionando (:

Em linhas gerais criamos uma thread para a parte gráfica que ficava congelada enquanto
o processo principal estava em andamento.

a função setText não precisou ser alterada.
Ficou assim mesmo.

public static void atualizaBarraProgressoTitulo(final String texto) {
        barraProgessoTitulo.setText(texto);
}
Criado 13 de dezembro de 2010
Ultima resposta 21 de dez. de 2010
Respostas 14
Participantes 4