Bom dia, olhando o titulo parece ser algo facil, porem não é… pelo menos não pra mim.
É o seguinte, tenho um programa que vai adicionando componentes JPanel na tela, em uma ordem, um do lado do outro até tem 7 lado a lado, ai vai pra linha de baixo e faz a mesma coisa.
Até ai tudo bem, vide codigo1.
O meu problema é o seguinte, esses JPanel terão que respeitar uma ordem crescente. E o usuario quem ira defini-los. Então como eu faço pra que ele fique na ordem de acordo com o numero que o usuario digita?
Consigo fazer eles serem criados de boa (codigo2), porem ficam na ordem de criação, e não a ordem crescente. Alguem pode me dar uma luz?
codigo1
nesse codigo, ele cria as mesas na ordem, a variavel “mesaCriada” é iniciada em 0, e vai crescendo de acordo com as mesas que são criadas, até 27 (numero maximo de mesas).
int xMesa = 5;
int yMesa = 5;
int xLblMesa = 5;
if (mesaCriada < 28) {
int posicao;
if (mesaCriada == 0) {
xMesa = 5;
yMesa = 5;
} else if (mesaCriada < 7) {
xMesa = 5 + (mesaCriada * 135);
yMesa = 5;
xLblMesa = 5 + (mesaCriada * 15);
} else if (mesaCriada < 14) {
posicao = mesaCriada - 7;
xMesa = 5 + (posicao * 135);
yMesa = 130;
xLblMesa = 5 + (mesaCriada * 15);
} else if (mesaCriada < 21) {
posicao = mesaCriada - 14;
xMesa = 5 + (posicao * 135);
yMesa = 255;
xLblMesa = 5 + (mesaCriada * 15);
} else if (mesaCriada < 28) {
posicao = mesaCriada - 21;
xMesa = 5 + (posicao * 135);
yMesa = 380;
xLblMesa = 5 + (mesaCriada * 15);
}
} else {
javax.swing.JOptionPane.showMessageDialog(null, "Limite de Mesas criadas");
System.out.println("limite " + mesaCriada);
return;
}
codigo2 - Como podemos ver, estou adicionando um JPanel e dentro dele um JLabel ambos com tamanhos fixos. Esses componantes são add dentro de um JDesktopPane que se chama “maeprincipal”. E add um listener pra eventos quando clicar naquele JLabel.
JLabel lblMesa = new JLabel();
JPanel pnMesa = new JPanel();
pnMesa.setLayout(null);
pnMesa.add(lblMesa);
//AQUI TEM VARIAS CONFIGURAÇÕES DO LABEL INSIGNIFICANTES PARA O TOPICO
lblMesa.setText("MESA: " + mesa);
lblMesa.setPreferredSize(new java.awt.Dimension(118, 99));
pnMesa.add(lblMesa);
lblMesa.setBounds(5, 5, 120, 110);
pnMesa.setBounds(xMesa, yMesa, 130, 120);
mesaCriada++;
maeprincipal.add(pnMesa);
lblMesa.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseClicked(java.awt.event.MouseEvent evt) {
BotaoMesa(evt, mesa, lblMesa);
}
});

, o GridLayout não suporta ocultar os JPanels sem que eles ocupem espaço, eles tem que ser removidos e adicionados somente quando “em atendimento”, segue o código atualizado:
