Domanda

L'altro giorno questo codice funzionava. Ho cambiato alcune cose e l'ho rieseguito e ora non funziona come previsto. Ovviamente qualcosa che ho cambiato ha modificato il comportamento, ma sono tornato indietro e ho ripristinato tutti quei cambiamenti e ancora non funziona. Ignorando quel bit di informazione (per iniziare), perché questo codice non inserisce una griglia 15x15 di JLabels all'interno di un 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);
    }
}

gameBoard è un JPanel definito tramite GUI Builder di NetBeans. Ha una dimensione preferita, una dimensione massima (uguale a quella preferita). Le opzioni di ridimensionamento orizzontale / verticale sono disabilitate, ma quando questo codice viene eseguito ogni pulsante si estende orizzontalmente in una riga senza mai rompersi.

Se ho capito bene, FlowLayout dovrebbe avvolgere gli elementi quando raggiungono la fine del loro elemento di contenimento. Questo stava accadendo prima di oggi, non so davvero perché questo comportamento si sia fermato?

È stato utile?

Soluzione 4

L'ho capito. Apparentemente ho dovuto impostare la dimensione preferita all'interno del codice stesso. Basta impostarlo nella finestra delle proprietà di Netbeans non è sufficiente. Strano.

Altri suggerimenti

Sarebbe molto meglio usare un GridLayout .

GridLayout gridLayout = new GridLayout(15, 15);

Il layout del flusso potrebbe essere cambiato a causa dell'utilizzo di un nuovo aspetto, di caratteri diversi o di un aggiornamento della VM Java. Non è consigliabile definire un layout di flusso per questo uso poiché si fa affidamento su dimensioni sottostanti che possono variare tra macchine virtuali o aspetto grafico.

Nell'interesse di insegnare a un uomo a pescare:

I sistemi di controllo delle revisioni sono fantastici. Anche il tuo sistema sta effettuando un backup della tua fonte a intervalli frequenti.

Un'utile tecnica di debug è quella di portare via le cose finché non funziona. L'impostazione di un bordo provoca l'interruzione del codice. In alternativa, puoi scrivere un programma banale che dimostra il problema.

Ho riscontrato grande successo e controllo usando TableLayout e lo consiglierei a chiunque. Puoi definire le colonne e le righe usando un numero specifico di pixel, oppure puoi semplicemente usare TableLayout.PREFERRED per ogni colonna e / o riga. Layout molto piacevole e flessibile. Lo usiamo ovunque.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top