Amigo, faço o que vc está querendo.
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:
JLabel labelA = new JLabel();
labelA.setFont(new java.awt.Font("Arial", 0, 11));
labelA.setForeground(cor);
labelA.setText(filtro.getCampo().getDescricao());
labelA.setPreferredSize(new java.awt.Dimension(130, 14));
labelA.setName(String.valueOf(pos++));
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.
Boa sorte! 