Yo también estaba pensando en eso... pero, ¿cómo haría usted las divisiones?
No sé si está bien la idea de usar un GridLayout general y que cada celda ocupe un espacio en el GridLayout (así el primer componente es un JPanel vacío y Chile es el segundo JLabel agregado a ese GridLayout).
Y al llegar a las celdas con divisiones, usar otro GridLayout de (2, 2)...
Además no sé cómo hacer asignaciones a los espacios del GridLayout de manera no secuencial. Es decir, yo tendería a hacer un add para el primer valor, un add de un JPanel vacío, otro JPanel vacío y un add al otro valor.
Este es el código que he escrito para generar la tabla completa de momento:
JDialog ventanaTabla = new JDialog(ventana, true);
ventanaTabla.getContentPane().setLayout( new GridLayout(o+2, d+2) );
ventanaTabla.getContentPane().add( new JPanel() );
for(Paradero p : destinos)
ventanaTabla.getContentPane().add( new JLabel(p.getNombre()));
ventanaTabla.getContentPane().add( new JLabel("OFERTA") );
for(int i=0; i<o; ++i) {
ventanaTabla.getContentPane().add( new JLabel(origenes.get(i).getNombre()) );
for(int j=0; j<d; ++j)
ventanaTabla.getContentPane().add( matriz[i][j].getPanel() );
ventanaTabla.getContentPane().add( new JLabel(""+origenes.get(i).getSaldo()) );
}
ventanaTabla.getContentPane().add( new JLabel("DEMANDA") );
for(Paradero p : destinos)
ventanaTabla.getContentPane().add( new JLabel(""+p.getSaldo()) );
ventanaTabla.setLocationRelativeTo(ventana);
ventanaTabla.setVisible(true);
Y este es el resultado:
Ya he conseguido darle cierta forma, pero sí que se ve bien mal.
La clase celda presenta 2 atributos, que son los valores que quiero usar (uno en el cuadro interno y otro fuera) y presenta un método GET que genera un JPanel y lo devuelve. En el JPanel se incluye un JLabel en la posición 0,0 y el otro JLabel en la posición 40,25.
public JPanel getPanel() {
JPanel panelCelda = new JPanel();
panelCelda.setLayout( null );
JLabel etiquetaCosto = new JLabel( String.valueOf(costo) );
etiquetaCosto.setSize(40, 25);
etiquetaCosto.setLocation(0, 0);
panelCelda.add( etiquetaCosto );
JLabel etiquetaSaldo = new JLabel( String.valueOf(saldo) );
etiquetaSaldo.setSize(40, 25);
etiquetaSaldo.setLocation(40, 25);
panelCelda.setSize(50, 80);
panelCelda.setBorder( new LineBorder(Color.black, 2));
return panelCelda;
}
Muchas gracias por su ayuda. Espero me indique cómo lo haría usted porque tal vez estoy exagerando al usar un Layout de esa forma