Intentaré hacerlo agregando bordes a los componentes a medida que se agregan. La forma más sencilla de hacerlo es sólo con BorderFactory.createLineBorder()
, así:
JPanel panel = new JPanel(new GridLayout(10,10));
panel.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
for (int i =0; i<(10*10); i++){
final JLabel label = new JLabel("Label");
label.setBorder(BorderFactory.createLineBorder(Color.BLACK));
panel.add(label);
}
Sin embargo, que le dará más gruesas fronteras entre las células que en los bordes del panel, ya que los bordes exteriores sólo tendrán un uno un borde de un grosor de píxel y los bordes interiores tendrán dos bordes gruesos de un píxel juntos. Para evitar eso, se puede utilizar BorderFactory.createMatteBorder()
sólo para dibujar las fronteras de un píxel de ancho en todas partes:
final int borderWidth = 1;
final int rows = 10;
final int cols = 10;
JPanel panel = new JPanel(new GridLayout(rows, cols));
panel.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
final JLabel label = new JLabel("Label");
if (row == 0) {
if (col == 0) {
// Top left corner, draw all sides
label.setBorder(BorderFactory.createLineBorder(Color.BLACK));
}
else {
// Top edge, draw all sides except left edge
label.setBorder(BorderFactory.createMatteBorder(borderWidth,
0,
borderWidth,
borderWidth,
Color.BLACK));
}
}
else {
if (col == 0) {
// Left-hand edge, draw all sides except top
label.setBorder(BorderFactory.createMatteBorder(0,
borderWidth,
borderWidth,
borderWidth,
Color.BLACK));
}
else {
// Neither top edge nor left edge, skip both top and left lines
label.setBorder(BorderFactory.createMatteBorder(0,
0,
borderWidth,
borderWidth,
Color.BLACK));
}
}
panel.add(label);
}
}
Esto debe darle fronteras de ancho borderWidth
todas partes, tanto entre las células ya lo largo de los bordes exteriores.
Gracias a ti Joe ... :-) – Jessy
De nada. Buen ejemplo de una pregunta, por cierto, pude cortar y pegar el código directamente en Eclipse y ejecutarlo, lo que hizo que probar mi solución fuera muy fácil. –
intenté hacer que apareciera, pero cuando lo ejecuté el JFrame estaba vacío, nada allí – Ungeheuer