Texto do JLabel não aparece

Olá.

Estou com um problema. Eu tenho um JPanel com um JLabel dentro. Essa JLabel tem uma imagem na sua propriedade icon. Dentro do JPanel e acima do JLabel com a imagem, há também um jLayeredPanel com um outro JLabel dentro. Por algum motivo, a propriedade text desse novo JLabel não está aparecendo. O background e o border aparecem normalmente, apenas o text não. O mesmo acontece com um jButton, e com outros componentes eu imagino.

Por que isso acontece, e como corrigir?

Obrigado.

Coloque o que você fez aqui, para podermos olha como está.

Eu vou postar o código mais abaixo.

Antes, acredito ter reconhecido o problema, embora não saiba qual o motivo dele. Eu tinha alguns jLabel’s no meu aplicativo, mas resolvi deletá-los momentaneamente para mostrar à vocês uma imagem somente do jLabel cujo texto não aparece. Deletados os jLabel’s, comecei a criar novos, supondo que todos eles dariam o mesmo problema, certo? Acontece que os novos jLabel’s, na execução, aparecem com o texto dos jLabel’s deletados. Isso é, claro, sem que eu tenha alterado a propriedade text de algum deles.

Como eu tinha 7 jLabel’s (que foram deletados), se crio 8 novos jLabel’s, os 7 primeiros aparecem com texto de jLabel’s deletados, e o 8º aparece sem texto algum. Se eu crio um jButton, porém, como não havia nenhum jButton antes, ele já aparece sem texto, mesmo que sua propriedade text esteja definida como “jButton1”.

Deu pra entender ou ficou muito confuso?

Enfim, acredito que o problema seja por causa do seguinte código (gerado automaticamente pelo NetBeans):

É como se esse “jLabel1.text” já esteja definido. Então quando eu crio um novo jLabel1 e esse código é gerado, a sua propriedade text aparece como o text do jLabel1 que foi deletado. O mesmo acontece com “jLabel2.text”, “jLabel3.text”, etc. Por que será que isso acontece?

Para exemplificar melhor, aí estão imagens do ocorrido.

No GUI do NetBeans:
[URL=http://img228.imageshack.us/i/erronb.png/][/URL] [URL=http://g.imageshack.us/img228/erronb.png/1/][/URL]

Na execução:
[URL=http://img515.imageshack.us/i/erronb2.png/][/URL] [URL=http://g.imageshack.us/img515/erronb2.png/1/][/URL]

Como pode-se ver, na execução, o jLabel1 aparece com o texto de um jLabel que eu havia deletado anteriormente. O jButton1 e o jLabel20, por outro lado, aparecem sem texto. Isso acontece, provavelmente, porque, na geração do código…

… o “jLabel20.text” não existe. O mesmo vale para o jButton1.

Acredito, portanto, que o problema nada tenha a ver com a imagem, como eu havia imaginado.
Espero que possam me ajudar.

O código completo, como solicitado, a seguir:

package desktopapplication1;

import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;

/**
 * The application's main frame.
 */
public class DesktopApplication1View extends FrameView {


    public DesktopApplication1View(SingleFrameApplication app) {
        super(app);

        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        mainPanel = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        lblImagem = new javax.swing.JLabel();
        lblImagem.setBackground(null);

        mainPanel.setName("mainPanel"); // NOI18N
        mainPanel.setLayout(null);

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(desktopapplication1.DesktopApplication1.class).getContext().getResourceMap(DesktopApplication1View.class);
        jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N
        jButton1.setName("jButton1"); // NOI18N
        mainPanel.add(jButton1);
        jButton1.setBounds(10, 333, 100, 50);

        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
        jLabel1.setBorder(javax.swing.BorderFactory.createLineBorder(resourceMap.getColor("jLabel1.border.lineColor"))); // NOI18N
        jLabel1.setName("jLabel1"); // NOI18N
        jLabel1.setOpaque(true);
        mainPanel.add(jLabel1);
        jLabel1.setBounds(120, 330, 100, 50);

        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText(resourceMap.getString("jLabel20.text"));
        jLabel2.setBorder(javax.swing.BorderFactory.createLineBorder(resourceMap.getColor("jLabel2.border.lineColor"))); // NOI18N
        jLabel2.setName("jLabel2"); // NOI18N
        jLabel2.setOpaque(true);
        mainPanel.add(jLabel2);
        jLabel2.setBounds(230, 330, 100, 50);

        lblImagem.setIcon(new javax.swing.ImageIcon("C:\\Documents and Settings\\Lucas Lages\\Meus documentos\\My Stuff\\Imagens\\ferrari.jpg")); // NOI18N
        lblImagem.setText(resourceMap.getString("lblImagem.text")); // NOI18N
        lblImagem.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        lblImagem.setName("lblImagem"); // NOI18N
        lblImagem.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseMoved(java.awt.event.MouseEvent evt) {
                lblImagemMouseMoved(evt);
            }
        });
        mainPanel.add(lblImagem);
        lblImagem.setBounds(0, 0, 480, 392);

        setComponent(mainPanel);
    }// </editor-fold>

    private void lblImagemMouseMoved(java.awt.event.MouseEvent evt) {                                     
        
    }                                    

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel lblImagem;
    private javax.swing.JPanel mainPanel;
    // End of variables declaration
}

Obrigado.

Você já tentou renomear cada variável dessa? Já, que como você falou, quando você delata alguma desse e cria outro o nome da que foi deleta aparece na nova. Tente renomea-las.
Tente sempre que possível nomear cada variável, só não é preciso aquelas variável que você não irá utilizar para modificação ou manipulação do código fonte, mais para as outras é bom renomea-las.

Não é o nome da anterior que aparece na nova, e sim o texto.

Mas enfim… sim, eu posso mudar o nome do JLabel. Mas isso não vai corrigir o problema, apenas evitá-lo. Eventualmente, eu terei esse problema porque, como você disse, não é preciso nomear as variáveis que não são utilizadas para modificação ou manipulação do código fonte, e eu usarei essas variáveis com certa frequência.

E de qualquer maneira, isso não vai corrigir o problema porque, como eu disse no outro post, quando eu crio jLabel’s novos com nomes não utilizados anteriormente, o que acontece é que, em vez de pegar um texto já definido, o texto simplesmente não existe. Ou seja, seguindo a linha do meu post anterior, se eu crio um jLabel chamada jLabel20, como não havia um jLabel20 anteriormente, o texto dele não vai aparecer.

E isso já tá começando a ficar confuso demais. Eu não sei porque isso acontece, mas tenho quase certeza de que é erro do IDE. E está ficando confuso de tal forma que se mais alguém tentar entender o meu problema, não vai conseguir. Então eu vou tentar resumir o que está acontecendo:

[b]- Eu estou criando um aplicativo no NetBeans há algum tempo, e a partir de um certo momento, o texto de cada novo jLabel que eu criei não aparece durante a execução, embora as suas outras propriedades funcionem perfeitamente (background, border, etc).

  • Percebi então que, na verdade, quando eu crio um novo jLabel, o NetBeans gera o seguinte código:[/b]

[b]- Esse código pega o valor da propriedade text do jLabel1.

  • O erro é que, por algum motivo, o valor dessa propriedade não é a do jLabel1 atual, mas a do jLabel1 que eu usei anteriormente e que foi deletado (Exemplo: eu tinha alguns jLabel’s no meu aplicativo funcionando perfeitamente, um deles se chamava jLabel1. Depois de um determinado momento, eu deletei o jLabel1 e criei um novo jLabel com o mesmo nome. Independente do valor que eu coloque na propriedade text do novo jLabel1, ele SEMPRE pega o valor do text da jLabel1 que foi deletado).
  • Da mesma forma, se eu crio um jLabel cujo nome não foi utilizado anteriormente (jLabel20, por exemplo), a propriedade text desse jLabel fica vazia SEMPRE, independente do valor que eu defina para ela.[/b]

ESSE é o grande problema. É difícil de explicar, e talvez mais difícil de entender. Mas espero que alguma alma caridosa possa me ajudar. E vale salientar que esse problema não acontece a partir do momento em que eu crio o projeto. Durante um bom período da construção do aplicativo, tudo funciona perfeitamente. Até que de repente começa a dar esse problema. E eu falo isso porque não é a primeira vez que isso me acontece.

Obrigado. :wink:

Caramba…

Mas eu tenho uma pergunta: o objeto resourceMap é de que tipo?

Olá pessoal,

Estou com o mesmo problema e até agora nada funciona.
O texto dos componentes não aparecem em tempo de execução, somente no IDE do NetBeans no momento da edição.
Isso também acontece com o texto do jMenu, jLabel, jRadioButton etc…

Alguém já passou por isso e resolveu?
Obrigado

Estava com um problema parecido. Consegui resolver ao “Limpar e construir” o projeto.