Pregunta

El otro día este código estaba funcionando. Cambié algunas cosas y lo volví a ejecutar y ahora no funciona como estaba previsto. Obviamente, algo que cambié alteró el comportamiento, pero he vuelto atrás y he revertido todos esos cambios y aún no funciona. Sin tener en cuenta ese bit de información (para comenzar), ¿por qué este código no coloca una cuadrícula 15x15 de JLabels dentro de 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 es un JPanel definido a través del Constructor de GUI de NetBeans. Tiene un tamaño preferido, un tamaño máximo (igual que el preferido). Las opciones de tamaño variable horizontal / vertical están deshabilitadas, sin embargo, cuando este código se ejecuta, cada botón se extiende horizontalmente en una fila sin romperse nunca.

Si entiendo correctamente, se supone que FlowLayout envuelve los elementos cuando llegan al final de su elemento contenedor. Esto estaba ocurriendo antes de hoy, realmente no sé por qué este comportamiento se detuvo.

¿Fue útil?

Solución 4

Lo descubrí. Aparentemente tuve que establecer el tamaño de preferencia dentro del código mismo. Simplemente configurarlo en la ventana de propiedades de Netbeans no es suficiente. Extraño.

Otros consejos

Sería mucho mejor usar un GridLayout .

GridLayout gridLayout = new GridLayout(15, 15);

El diseño del flujo puede haber cambiado debido al uso de una nueva apariencia, diferentes fuentes o alguna actualización de Java VM. No se recomienda definir un diseño de flujo para este uso, ya que depende de los tamaños subyacentes que pueden variar entre las máquinas virtuales o la apariencia.

En el interés de enseñarle a un hombre cómo pescar:

Los sistemas de control de revisiones son excelentes. Incluso su sistema está haciendo una copia de seguridad de su fuente a intervalos frecuentes.

Una técnica de depuración útil es quitar cosas hasta que funcione. ¿La configuración de un borde hace que el código se rompa Yendo por el otro lado, ¿puedes escribir un programa trivial que demuestre el problema?

Encontré un gran éxito y control utilizando TableLayout y se lo recomendaría a cualquiera. Puede definir las columnas y filas usando un número específico de píxeles, o simplemente puede usar TableLayout.PREFERRED para cada columna y / o fila. Muy bonito y flexible diseño. Lo usamos en todas partes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top