Estou fazendo um sistema para restaurante. Tenho uma tabela no BD onde são cadastradas as mesas. Preciso, em uma tela, gerar um botão para cada mesa cadastrada. Um botão ao lado do outro, e ao acabar a linha continuar gerando na próxima linha. E caso acabe o espaço para baixo, gerar um scrool para continuar gerando os botões.
Qual a melhor maneira de se gerar esses botões dinamicamente com este comportamento de adicionar o scroll?
Não quero códigos, só quero uma luz para saber o que usar.
Eu aconselho você usar o JScrollPane para gerar barra de rolagem e dentro dele, você coloca um JDesktopPane que torna mais fácil fazer cálculos de onde colocar o botão.
Tem várias formas de resolver o seu problema, mas esta seria a que eu utilizaria.
Obs, não resisti em postar o código,
importjava.awt.Dimension;importjava.awt.HeadlessException;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JDesktopPane;importjavax.swing.JFrame;importjavax.swing.JScrollBar;importjavax.swing.JScrollPane;importjavax.swing.SwingUtilities;/** * @author Murilo de Mello P. Oliveira */publicclassRestauranteextendsJFrame{publicActionListenerbtnCLick=null;publicintcontBtn=0;publicRestaurante()throwsHeadlessException{setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setSize(800,600);JDesktopPanedeskPanel=newJDesktopPane();deskPanel.setSize(800,600);JScrollPanescroll1=newJScrollPane(deskPanel);scroll1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);add(scroll1);JButtonbtn1=newJButton("Adicionar");btn1.setSize(200,40);btn1.setLocation(10,10);deskPanel.add(btn1);btnCLick=newActionListener(){publicsynchronizedvoidactionPerformed(ActionEvente){intbtnPorLinha=800/(200+10);intlinhaAtual=(++contBtn)/btnPorLinha;intlocalAtual=contBtn%btnPorLinha;JButtonnewbtn=newJButton("Adicionar ("+contBtn+")");newbtn.setSize(200,40);newbtn.setLocation(10+((200+10)*localAtual),10+((40+10)*linhaAtual));newbtn.addActionListener(btnCLick);Dimensiond=newDimension(800,10+((40+10)*linhaAtual)+50);deskPanel.setPreferredSize(d);deskPanel.setSize(d);SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){JScrollBarjsb=scroll1.getVerticalScrollBar();jsb.setValue(jsb.getMaximum());}});deskPanel.add(newbtn);}};btn1.addActionListener(btnCLick);}publicstaticvoidmain(String[]args){newRestaurante().setVisible(true);}}
E caso isso ou alguma outra postagem resolva o seu problema, por
favor, não esqueça de marcar o tópico como resolvido para o fórum não
ficar poluído.
Valeu.
R
Rodrigo1895
Valeu cara, executei aqui e funcionou certinho
Só uma dúvida. Esta parte de adicionar botão ficou meio que complicada, usando um gerenciador de layout horizontal (FlowLayout) e só mandando inserir sem fazer estas contas de posicionamento não daria certo?
M
Murilo.MPO
Como eu falei, tem vários meios de resolver o problema, no meu exemplo eu utilizei o JDesktopPane porque já tinha trabalhado com ele uma vez e sabia que daria para resolver o problema. Lembro que na faculdade meu professor abordou um monte de layouts para o Swing mas no dia a dia quando tenho que fazer uma aplicação Desktop, eu só uso o Gerenciador de Designer do NetBeans que gera códigos malucos e indecifráveis, mas que funcionam muito bem, e nele, quando arrasta uma lista ou tabela, ele já gera a barra de rolagem… Sinceramente, eu não conhecia o FlowLayout mas pelo que olhei agora no Google, parece que ele faz o que eu fiz com o JDesktopPane, talvez até com uma vantagem, já que parece que ele se ajusta conforme o usuário redimensionar a janela, mas tem que testar para ver se funciona.
Isso que é legal em um fórum, mesmo quando você responde algo, você também aprende algo novo. Valeu.