importjava.util.ArrayList;importjava.util.Iterator;importjavax.swing.*;importjava.awt.*;importjava.util.ArrayList.*;publicclassBorderLayoutTestextendsJFrame{publicArrayListnotes;publicBorderLayoutTest(){//private ArrayList notes;notes=newArrayList();intnums;JButtonbotao=newJButton("Botão");/*JButton botao2 = new JButton("Botão 2"); JButton botao3 = new JButton("Botão 3"); JButton botao4 = new JButton("Botão 4"); JButton botao5 = new JButton("Botão 5");*/// Como o padrao de um JFrame é o // BorderLayout, simplesmente adicionamos// os componentes na telagetContentPane().add(botao,BorderLayout.NORTH);// getContentPane().add(botao2, BorderLayout.CENTER);/*getContentPane().add(botao3, BorderLayout.WEST); getContentPane().add(botao4, BorderLayout.SOUTH); getContentPane().add(botao5, BorderLayout.EAST);*/Iteratorit=notes.iterator();while(it.hasNext()){notes.add(botao);//notes.add(botao2);/*notes.add(botao3); notes.add(botao4); notes.add(botao5);*/System.out.println(it.next());}setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);pack();setVisible(true);}publicstaticvoidmain(Stringargs[]){newBorderLayoutTest();}}
A ideia é adicionar botoes a um ArrayList, cujo seu tamanho vai ser definido pelo utilizador. Uma grelha de N*N casas (N entre 10 e 26; as linhas são identificadas por letras a partir de A, e as colunas por números a partir de 1). Será obviamente desatroso adicionar os botoes manualmente né? Que outra forma mais eficaz e simples?
acredito que naum tenha outra forma de adicionar isso,mesmo por que vc teria que validar a quantidade que o usuário solicitar e dai adicionar… melhor memso fazer da forma que vc fez…
certa vez fiz algo semelhante para um tabuleiro de xadrez… onde tinha que adicionar as “casas” do jogo… foi meio trabalho ainda mais porque cada casa tem uma cor… mas ficou parecido com a forma que vc fez…
abraços…
rodrigo1
e se usar uma matriz !?.. não fica mais fácil p/ descobrir depois qual botão foi acionado !? …
P
paulovr
Como assim ma matriz? Um ArrayList Bidimensional?
A dificuldade que tenho agora é o facto de que terei de inserir à mão os botoes, q podem ser no maximo mais de 80. Fazer à mão mais de 120 (pois tabuleiro pra jogador e cmputador) será desastroso. Não haverá forma mais simples de inserir botoes ao ArrayList?
Digam algo, sugestoes!!! Partilhem ideias malta!!
rodrigo1
tá meio tosco .....
mas é isto que eu tava querendo dizer ...
vê se ajuda ?
importjava.awt.BorderLayout;importjava.awt.Dimension;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPanel;@SuppressWarnings("serial")publicclassMainFrameextendsJFrameimplementsActionListener{JButton[][]_botoes=null;publicMainFrame(){setSize(400,400);setLayout(newBorderLayout());setLocation(200,100);getContentPane().add(getPanelComponents());setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setMinimumSize(newDimension(400,400));setVisible(true);}privateJPanelgetPanelComponents(){JPanelpanel=newJPanel();panel.setLayout(newGridLayout(20,20));_botoes=newJButton[20][20];for(inti=0;i<20;i++){for(intj=0;j<20;j++){JButtonb=newJButton();b.addActionListener(this);_botoes[i][j]=b;panel.add(b,i,j);}}returnpanel;}publicstaticvoidmain(String[]args){MainFramefr=newMainFrame();}publicvoidactionPerformed(ActionEvente){// OBS: o botão 0,0 (Ref) é o do cando inferior esquerdofor(inti=0;i<20;i++){for(intj=0;j<20;j++){if(e.getSource()==_botoes[i][j]){JOptionPane.showMessageDialog(this,"botão: "+i+","+j);}}}}}
P
paulovr
legal.
ja entendi.
thanks.
a ideia é fazer o jogo batalha naval e tou pensando fazer dois tabuleiros dentro de uma jframe.
um tabuleiro pra o jogador e outro pra o computador.
como poderia fazer? tipo 2 jframes internas? uma pra cada tabuleiro?
rodrigo1
na verdade seriam dois JPanels, … um para cada tabuleiro …
P
paulovr
Tentei mas não deu!
Dá erro! Ora vejam o codigo!...
importjava.awt.BorderLayout;importjava.awt.Dimension;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPanel;publicclassMainFrameextendsJFrameimplementsActionListener{JButton[][]botoes=null;publicMainFrame(){setSize(400,400);setLayout(newBorderLayout());setLocation(200,100);getContentPane().add(getPanelComponents());setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setMinimumSize(newDimension(400,400));setVisible(true);}privateJPanelgetPanelComponents(){JPanelpanel1=newJPanel();JPanelpanel2=newJPanel();panel1.setLayout(newGridLayout(10,10));panel2.setLayout(newGridLayout(20,20));botoes=newJButton[10][10];botoes=newJButton[20][20];for(inti=0;i<10;i++){for(intj=0;j<10;j++){JButtonb=newJButton();b.addActionListener(this);botoes[i][j]=b;panel1.add(b,i,j);panel2.add(b,i,j);}}returnpanel1;returnpanel2;}publicstaticvoidmain(String[]args){MainFramefr=newMainFrame();//desnecessario pois nunca é lida a fr}publicvoidactionPerformed(ActionEvente){// OBS: o botão 0,0 (Ref) é o do cando inferior esquerdofor(inti=0;i<10;i++){for(intj=0;j<10;j++){if(e.getSource()==botoes[i][j]){JOptionPane.showMessageDialog(this,"botão: "+i+","+j);}}}}}
rodrigo1
return panel1;
return panel2;
depois que um método executa o return …
o que vier depois não é executado …
vê aqui :
vc pode por exemplo fazer dois desses um para cada tabuleiro …
P
paulovr
sim entendi, mas dá erro, ora veja:
importjava.awt.BorderLayout;importjava.awt.Dimension;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPanel;publicclassMainFrameextendsJFrameimplementsActionListener{JButton[][]botoes=null;publicMainFrame(){setSize(400,400);setLayout(newBorderLayout());setLocation(200,100);getContentPane().add(getPanelComponents());getContentPane().add(getPanelComponents());setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setMinimumSize(newDimension(600,500));setVisible(true);}privateJPanelgetPanelComponents(){JPanelpanel1=newJPanel();//JPanel panel2 = new JPanel();panel1.setLayout(newGridLayout(10,10));//panel2.setLayout(new GridLayout(20,20));botoes=newJButton[10][10];//botoes = new JButton[20][20];for(inti=0;i<10;i++){for(intj=0;j<10;j++){JButtonb=newJButton();b.addActionListener(this);botoes[i][j]=b;panel1.add(b,i,j);//panel2.add(b,i,j);}}returnpanel1;//return panel2;}privateJPanelgetPanelComponents()(){//JPanel panel1 = new JPanel();JPanelpanel2=newJPanel();//panel1.setLayout(new GridLayout(10,10));panel2.setLayout(newGridLayout(20,20));//botoes = new JButton[10][10];botoes=newJButton[20][20];for(inti=0;i<10;i++){for(intj=0;j<10;j++){JButtonb=newJButton();b.addActionListener(this);botoes[i][j]=b;//panel1.add(b,i,j);panel2.add(b,i,j);}}//return panel1;returnpanel2;}publicstaticvoidmain(String[]args){MainFramefr=newMainFrame();//desnecessario pois nunca é lida a fr}publicvoidactionPerformed(ActionEvente){// OBS: o botão 0,0 (Ref) é o do cando inferior esquerdofor(inti=0;i<10;i++){for(intj=0;j<10;j++){if(e.getSource()==botoes[i][j]){JOptionPane.showMessageDialog(this,"botão: "+i+","+j);}}}}}
P
paulovr
o q será q me escapa?
humm…
Luca
Olá
A criação de títulos de tópicos com o mínimo bom senso.
[]s
Luca
rodrigo1
olha meu amigo … tá doze viu …
vc tá cometendo erros de conceito muito básicos …
rola estudar mais Java …
o que é isto !?
além disto … dois métodos com a mesma assinatura ?
P
paulovr
eu tou aprendendo java sim.
inda tou no começo.
e esta materia inda n dei, apenas tou aprendendo antecipadamente!
mas obrigado pelas lições/sugestoes!
o getPanelComponents() é um metodo que mostra q “saca” painel, certo?
Sim, erro grave (q ja aprendi) de ter metodos com as assinaturas iguazinhas!
Sim, tenho antes de aprender pra dps questionar por aqui.
Que recomendação dá pra estudar este conteúdo? Swings, Awt, JFrames, Jframes internas, …! O tutorial da Sun n gosto. Conhece algum tutorial bom que fale bem de forma simples e agradavel sobre esta materia. Assim estarei dentro do assunto e assim falaremos sobre ele, …!
P
paulovr
Fiz umas experiencias mas continua a dar erro:...
se tenho de estudar mais, digam no problem ora ;)
importjava.awt.*;importjavax.swing.*;importjavax.swing.border.*;publicclassmanGuiextendsJFrameimplementsActionListener{// variaveisprivateJPanelcontentPane;privateJPaneljPanel1;privateJPaneljPanel2;privateJPaneljPanel3;JButton[][]_botoes=null;publicmanGui(){super();initializeComponent();this.setVisible(true);}privatevoidinitializeComponent(){contentPane=(JPanel)this.getContentPane();//----- jPanel1=newJPanel();//----- jPanel2=newJPanel();//----- jPanel3=newJPanel();//----- // contentPane contentPane.setLayout(null);addComponent(contentPane,jPanel1,28,75,319,356);addComponent(contentPane,jPanel2,368,75,297,356);addComponent(contentPane,jPanel3,30,465,636,66);// jPanel1 jPanel1.setLayout(null);jPanel1.setBorder(newTitledBorder("Jogador"));//---------------_botoes=newJButton[10][10];for(inti=0;i<10;i++){for(intj=0;j<10;j++){JButtonb=newJButton();b.addActionListener(this);_botoes[i][j]=b;JPanel1.add(b,i,j);}returnJPanel1;}//---------------// jPanel2 jPanel2.setLayout(null);jPanel2.setBorder(newTitledBorder("Computador"));// jPanel3 jPanel3.setLayout(newFlowLayout(FlowLayout.CENTER,5,5));// manGui this.setTitle("IGui");this.setLocation(newPoint(0,0));this.setSize(newDimension(722,577));}// Add Componentes privatevoidaddComponent(Containercontainer,Componentc,intx,inty,intwidth,intheight){c.setBounds(x,y,width,height);container.add(c);}//Mainpublicstaticvoidmain(String[]args){JFrame.setDefaultLookAndFeelDecorated(true);JDialog.setDefaultLookAndFeelDecorated(true);try{UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");}catch(Exceptionex){System.out.println("Nao abre L&F: ");System.out.println(ex);}newmanGui();}publicvoidactionPerformed(ActionEvente){// OBS: o botão 0,0 (Ref) é o do cando inferior esquerdofor(inti=0;i<10;i++){for(intj=0;j<10;j++){if(e.getSource()==_botoes[i][j]){JOptionPane.showMessageDialog(this,"botão: "+i+","+j);}}}}}