Fala galera, beleza?? É o seguinte, estou desenvolvendo um jogo da velha, mas estou tendo dúvidas. Eu Criei JLabels 3x3, mas o problema é que quando o usuário digita X por exemplo, quando movo o valor para o JLabel, o tamanho do JLabel é redimensionado, ferrando todo o layout da tela. Alguém tem alguma solução???
Se você usar o GridLayout em um JPanel acredito que isso não ocorra.
fw
thundercas
Vo tenta e já retorno aqui, valeu!
thundercas
Cara, não deu certo… Os JLabels continuam mudando de tamanho quando altero a descrição deles.
Dieval_Guizelini
Acho que você está tendo problemas com os layouts, veja o exemplo que fiz:
publicclassMainAppextendsjavax.swing.JFrame{/** Creates new form MainApp */publicMainApp(){initComponents();}/** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */// <editor-fold defaultstate="collapsed" desc="Generated Code">privatevoidinitComponents(){jPanel1=newjavax.swing.JPanel();jLabel1=newjavax.swing.JLabel();jLabel7=newjavax.swing.JLabel();jLabel9=newjavax.swing.JLabel();jLabel5=newjavax.swing.JLabel();jLabel4=newjavax.swing.JLabel();jLabel2=newjavax.swing.JLabel();jLabel6=newjavax.swing.JLabel();jLabel8=newjavax.swing.JLabel();jLabel3=newjavax.swing.JLabel();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setTitle("teste");jPanel1.setBackground(newjava.awt.Color(255,255,0));jPanel1.setLayout(newjava.awt.GridLayout(3,3,2,2));jLabel1.setText("jLabel1");jLabel1.setOpaque(true);jPanel1.add(jLabel1);jLabel7.setText("jLabel7");jLabel7.setOpaque(true);jPanel1.add(jLabel7);jLabel9.setText("jLabel9");jLabel9.setOpaque(true);jPanel1.add(jLabel9);jLabel5.setText("jLabel5");jLabel5.setOpaque(true);jPanel1.add(jLabel5);jLabel4.setText("jLabel4");jLabel4.setOpaque(true);jPanel1.add(jLabel4);jLabel2.setText("jLabel2");jLabel2.setOpaque(true);jPanel1.add(jLabel2);jLabel6.setText("jLabel6");jLabel6.setOpaque(true);jPanel1.add(jLabel6);jLabel8.setText("jLabel8");jLabel8.setOpaque(true);jPanel1.add(jLabel8);jLabel3.setText("jLabel3");jLabel3.setOpaque(true);jPanel1.add(jLabel3);getContentPane().add(jPanel1,java.awt.BorderLayout.CENTER);pack();}// </editor-fold>/** * @param args the command line arguments */publicstaticvoidmain(Stringargs[]){java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newMainApp().setVisible(true);}});}// Variables declaration - do not modifyprivatejavax.swing.JLabeljLabel1;privatejavax.swing.JLabeljLabel2;privatejavax.swing.JLabeljLabel3;privatejavax.swing.JLabeljLabel4;privatejavax.swing.JLabeljLabel5;privatejavax.swing.JLabeljLabel6;privatejavax.swing.JLabeljLabel7;privatejavax.swing.JLabeljLabel8;privatejavax.swing.JLabeljLabel9;privatejavax.swing.JPaneljPanel1;// End of variables declaration}
eu fiz duas coisas, defini as cores das linhas do jogo da velha como amarelas e a distância entre um célula e outra do grid como sendo 2.
aqui funcionou, ou seja, posso modificar os valores dos labels, ampliar ou reduzir o form, e o formato da velha é preservado.
tenta aí.
fw
thundercas
Legal cara, vou tentar!! Obrigado!!!
thundercas
Dieval, com sua ajuda eu consegui montar o programa ^^
importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.WindowConstants;publicclassJogoDaVeliaextendsJFrameimplementsActionListener{privateintjogador=1;intj=1,flag=0;Stringjogador1,jogador2;privateintjogo[][]=newint[3][3];Stringdesenho;JPanelpainel=newJPanel();JButtonb1=newJButton("");JButtonb2=newJButton("");JButtonb3=newJButton("");JButtonb4=newJButton("");JButtonb5=newJButton("");JButtonb6=newJButton("");JButtonb7=newJButton("");JButtonb8=newJButton("");JButtonb9=newJButton("");publicstaticvoidmain(Stringargs[]){java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newJogoDaVelia().setVisible(true);}});}publicJogoDaVelia(){iniciarComponentes();}publicvoidiniciarComponentes(){painel.add(b1);painel.add(b2);painel.add(b3);painel.add(b4);painel.add(b5);painel.add(b6);painel.add(b7);painel.add(b8);painel.add(b9);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);b4.addActionListener(this);b5.addActionListener(this);b6.addActionListener(this);b7.addActionListener(this);b8.addActionListener(this);b9.addActionListener(this);for(inti=0;i<3;i++){for(intj=0;j<3;j++){jogo[i][j]=0;}}setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);setTitle("Jogo da Velha");painel.setBackground(newColor(255,255,0,0));painel.setLayout(newGridLayout(3,3,2,2));getContentPane().add(painel,BorderLayout.CENTER);painel.setVisible(true);pack();jogador1=JOptionPane.showInputDialog("Digite o nome do primeiro jogador:");jogador2=JOptionPane.showInputDialog("Digite o nome do segundo jogador:");}publicvoidactionPerformed(ActionEvente){if(jogador%2==0){desenho="O";j=2;}else{desenho="X";j=1;}jogador++;if(e.getSource()==b1){b1.setText(desenho);b1.setEnabled(false);jogo[0][0]=j;}elseif(e.getSource()==b2){b2.setText(desenho);b2.setEnabled(false);jogo[0][1]=j;}elseif(e.getSource()==b3){b3.setText(desenho);b3.setEnabled(false);jogo[0][2]=j;}elseif(e.getSource()==b4){b4.setText(desenho);b4.setEnabled(false);jogo[1][0]=j;}elseif(e.getSource()==b5){b5.setText(desenho);b5.setEnabled(false);jogo[1][1]=j;}elseif(e.getSource()==b6){b6.setText(desenho);b6.setEnabled(false);jogo[1][2]=j;}elseif(e.getSource()==b7){b7.setText(desenho);b7.setEnabled(false);jogo[2][0]=j;}elseif(e.getSource()==b8){b8.setText(desenho);b8.setEnabled(false);jogo[2][1]=j;}elseif(e.getSource()==b9){b9.setText(desenho);b9.setEnabled(false);jogo[2][2]=j;}for(inti=0;i<3;i++){if((jogo[0][i]==1)&&(jogo[1][i]==1)&&(jogo[2][i])==1){flag=1;}elseif((jogo[0][i]==2)&&(jogo[1][i]==2)&&(jogo[2][i])==2){flag=2;}}for(inti=0;i<3;i++){if((jogo[i][0]==1)&&(jogo[i][1]==1)&&(jogo[i][2])==1){flag=1;}elseif((jogo[i][0]==2)&&(jogo[i][1]==2)&&(jogo[i][2])==2){flag=2;}}if((jogo[0][0]==1)&&(jogo[1][1]==1)&&(jogo[2][2]==1))flag=1;elseif((jogo[0][0]==2)&&(jogo[1][1]==2)&&(jogo[2][2]==2))flag=2;if((jogo[0][2]==1)&&(jogo[1][1]==1)&&(jogo[2][0]==1))flag=1;elseif((jogo[0][2]==2)&&(jogo[1][1]==2)&&(jogo[2][0]==2))flag=2;if(jogador>9){JOptionPane.showMessageDialog(null,"Deu velha!!");b1.setEnabled(false);b2.setEnabled(false);b3.setEnabled(false);b4.setEnabled(false);b5.setEnabled(false);b6.setEnabled(false);b7.setEnabled(false);b8.setEnabled(false);b9.setEnabled(false);}elseif(flag==1||flag==2){if(flag==1)JOptionPane.showMessageDialog(null,"O jogador "+jogador1+" venceu!");elseJOptionPane.showMessageDialog(null,"O jogador "+jogador2+" venceu!");b1.setEnabled(false);b2.setEnabled(false);b3.setEnabled(false);b4.setEnabled(false);b5.setEnabled(false);b6.setEnabled(false);b7.setEnabled(false);b8.setEnabled(false);b9.setEnabled(false);}}}
Ficou simples, mas era mais ou menos o que eu queria… Agora vou tentar montar Single Player… Se tiver alguma sugestão ou correção no meu programa, fique a vontade. Valeu abraços!!