Grid 2d de JComponentes (swing)
-
28-10-2019 - |
Pregunta
Estoy tratando de hacer una cuadrícula 2D de JTextFields para representar un mapa de nivel. He llegado a lo siguiente para inicializar la matriz 2D de Textfields:
fields = new TextField[level.rows][level.columns];
TextField field;
for (int r = 0; r < level.rows; r++) {
for (int c = 0; c < level.columns; c++) {
field = new TextField(level.bricks[r][c].type);
fields[r][c] = field;
}
Ahora tengo que agregarlos al Jframe, pero necesitan estar alineados para que cada row
se mete debajo de la otra columna. Encontré GridLayout, sin embargo, no tengo mucha experiencia con AWT/Swing, y aún así no sé cómo lograr el diseño deseado. Esperaba que hubiera algún tipo de método como gLayout.add(JComponent,row,column)
.
Solución
Esto debería funcionar como lo explicó, aquí hay un ejemplo completamente funcional que pone JLabels
En la cuadrícula 5x5:
import java.awt.*;
import javax.swing.*;
public class GridPrb {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cp = frame.getContentPane();
cp.setLayout(new GridLayout(5, 5));
for(int y = 0; y < 5; y++) {
for(int x = 0; x < 5; x++) {
Label l = new Label("x=" + x + ",y=" + y);
cp.add(l);
}
}
frame.pack();
frame.setVisible(true);
}
}
El resultado final se vería algo así:
Espero que esto ayude.
Otros consejos
Debe tener cuidado al agregar orden, el contenedor se llena columna tras columna en GridLayout.
frame.setLayout( new GridLayout( level.rows, level.columns );
for (int c = 0; c < level.columns; r++)
for (int r = 0; r < level.rows; c++)
frame.add(fields[r][c]);