Estou tentando à algum tempo construir um JLabel dinâmico, alterar seu tamanho de acordo com o texto colocado nele, para que esteja sempre com o tamanho necessário parar mostrar seu conteúdo, sem as reticências.
Meu problema basea-se em descobrir o tamanho ideal, em pixels (altura e largura) para o componente, sendo que o label pode mudar de e conteúdo e fonte em tempo de excecução.
Para resolver isso, busco descobrir como calcular esse tamanho. Mas até agora não tive sucesso.
Alguém já fez algo semelhante, ou teria alguma idéia de como chegar nesse tamanho?
Quem determina o tamanho do componente é o layout manager do container no qual ele foi inserido. Se você usar um BorderLayout, por exemplo, o JLabel não deve mostrar reticências até que o espaço do container pai se esgote (i.e., você vai obter o comportamento “dinâmico” que procura). Portanto, acho que a solução que você procura deve estar mais para o lado de escolher um layout manager adequado.
Se ainda assim você quiser saber o tamanho preferido do JLabel, no entanto, use:
Numa determinada ocasição eu insiro dinamicamente os JLabels dentro de um JPanel. Em meu JPanel está configurado o layout como “Free Design”, ou seja, tô usando o Matisse.
Ai, em tempo de execução eu crio os JLabels e adiciono no JPanel. Para conseguir o que vc quer, ou seja um “JLabel com autosize”… hehehe… basta simplesmente ao criar o JLabel NÃO DEFINIR SEU TAMANHO. Descobri que não definindo o tamanho ele fica um esquema “autosize”.
Veja por ex, este JLabel eu tô especificando o tamanho, ele fica com um tamanho fixo na tela:
Já este eu não especifico o tamanho, oque faz com que ele ajuste o tamanho na tela de acordo com seu conteúdo:
JLabel labelB = new JLabel();
labelB.setFont(new java.awt.Font("Arial", 0, 11));
labelB.setForeground(cor);
labelB.setText("");
labelB.setName(String.valueOf(pos++)); // não especifico o tamanho para esse label para que ele fique "autosize" durante a execução
Ambos os JLabels estão sendo adicionados no msm JPanel, usando o mesmo layout portanto, e funciona da forma como expliquei.