Pergunta

No outro dia este código estava funcionando. Mudei algumas coisas e re correu-lo e agora ele não funciona como pretendido. Obviamente algo que mudou alterado o comportamento, mas tenho de volta foi e voltou todas essas mudanças e ainda não funciona. Desconsiderando esse bocado de informação (para começar), por que este código não colocar uma grade de JLabels 15x15 dentro de um JPanel?

gameBoard.setLayout(new FlowLayout());

for (int i = 0; i < 15; i++)
{
    for (int j = 0; j < 15; j++)
    {
        JLabel tile = new JLabel("");                       
     tile.setHorizontalAlignment(SwingConstants.CENTER);
        tile.setPreferredSize(new Dimension(27, 27));
        tile.setBorder(new EtchedBorder());
        tile.setEnabled(false);

        gameBoard.add(tile);
    }
}

Tabuleiro é um JPanel definidos através de NetBeans GUI Builder. Tem um tamanho preferido, um tamanho máximo (o mesmo que o preferido). Os / opções redimensionáveis ??verticais horizontais estão desactivados, mas quando esse código é executado a cada botão estende horizontalmente em uma linha sem nunca quebrar.

Se bem entendi, FlowLayout é suposto envolver elementos quando atingem o fim do seu elemento contendo. Isso estava acontecendo antes de hoje, eu realmente não sei por que esse comportamento parou?

Foi útil?

Solução 4

Eu percebi isso. Aparentemente eu tinha que definir o PreferredSize dentro do próprio código. Apenas defini-lo na janela de propriedades do Netbeans não é suficiente. Strange.

Outras dicas

Seria muito melhor usar um GridLayout .

GridLayout gridLayout = new GridLayout(15, 15);

O layout de fluxo pode ter mudado devido ao uso de um novo look and feel, fontes diferentes ou alguma atualização Java VM. Definição de um layout de fluxo para este uso não é recomendado como você está dependente de tamanhos que podem variar entre diferentes máquinas virtuais ou look and feel subjacente.

No interesse de ensinar um homem a pescar:

sistemas de controle de revisão são grandes. Mesmo o seu sistema está a fazer um back-up de sua fonte em intervalos freqüentes.

A técnica de depuração útil é para tirar as coisas até que ele funciona. Será que definir uma fronteira porque você código para quebrar. Indo para o outro lado, você pode escrever um programa trivial que demonstra o problema.

Eu encontrei grande sucesso e controle usando TableLayout e eu recomendaria a ninguém. Você pode definir as colunas e linhas usando determinado número de pixels, ou você pode simplesmente usar TableLayout.PREFERRED para cada coluna e / ou linha. Muito agradável e layout flexível. Vamos utilizá-lo em todos os lugares.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top