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???
Valeu!!
Qual layout você está utilizando?
Se você usar o GridLayout em um JPanel acredito que isso não ocorra.
fw
Vo tenta e já retorno aqui, valeu!
Cara, não deu certo… Os JLabels continuam mudando de tamanho quando altero a descrição deles.
Acho que você está tendo problemas com os layouts, veja o exemplo que fiz:
[code]public class MainApp extends javax.swing.JFrame {
/** Creates new form MainApp */
public MainApp() {
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">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("teste");
jPanel1.setBackground(new java.awt.Color(255, 255, 0));
jPanel1.setLayout(new java.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
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MainApp().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}[/code]
Neste ponto:
jPanel1.setBackground(new java.awt.Color(255, 255, 0));
jPanel1.setLayout(new java.awt.GridLayout(3, 3, 2, 2));
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
Legal cara, vou tentar!! Obrigado!!!
Dieval, com sua ajuda eu consegui montar o programa ^^
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
public class JogoDaVelia extends JFrame implements ActionListener{
private int jogador = 1;
int j = 1, flag = 0;
String jogador1, jogador2;
private int jogo[][] = new int [3][3];
String desenho;
JPanel painel = new JPanel();
JButton b1 = new JButton("");
JButton b2 = new JButton("");
JButton b3 = new JButton("");
JButton b4 = new JButton("");
JButton b5 = new JButton("");
JButton b6 = new JButton("");
JButton b7 = new JButton("");
JButton b8 = new JButton("");
JButton b9 = new JButton("");
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JogoDaVelia().setVisible(true);
}
}); }
public JogoDaVelia () {
iniciarComponentes();
}
public void iniciarComponentes () {
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 (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++) {
jogo[i][j] = 0;
}
}
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setTitle("Jogo da Velha");
painel.setBackground(new Color(255, 255, 0, 0));
painel.setLayout(new GridLayout(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:");
}
public void actionPerformed(ActionEvent e) {
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;
}
else if (e.getSource() == b2) {
b2.setText(desenho);
b2.setEnabled(false);
jogo[0][1] = j;
}
else if (e.getSource() == b3) {
b3.setText(desenho);
b3.setEnabled(false);
jogo[0][2] = j;
}
else if (e.getSource() == b4) {
b4.setText(desenho);
b4.setEnabled(false);
jogo[1][0] = j;
}
else if (e.getSource() == b5) {
b5.setText(desenho);
b5.setEnabled(false);
jogo[1][1] = j;
}
else if (e.getSource() == b6) {
b6.setText(desenho);
b6.setEnabled(false);
jogo[1][2] = j;
}
else if (e.getSource() == b7) {
b7.setText(desenho);
b7.setEnabled(false);
jogo[2][0] = j;
}
else if (e.getSource() == b8) {
b8.setText(desenho);
b8.setEnabled(false);
jogo[2][1] = j;
}
else if (e.getSource() == b9){
b9.setText(desenho);
b9.setEnabled(false);
jogo[2][2] = j;
}
for (int i = 0; i < 3; i++) {
if ((jogo[0][i] == 1) && (jogo[1][i] == 1) && (jogo[2][i]) == 1){
flag = 1;
}
else if((jogo[0][i] == 2) && (jogo[1][i] == 2) && (jogo[2][i]) == 2){
flag = 2;
}
}
for (int i = 0; i < 3; i++) {
if ((jogo[i][0] == 1) && (jogo[i][1] == 1) && (jogo[i][2]) == 1){
flag = 1;
}
else if ((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;
else if ((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;
else if ((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);
} else if (flag == 1 || flag == 2){
if (flag == 1)
JOptionPane.showMessageDialog(null, "O jogador " + jogador1 + " venceu!");
else
JOptionPane.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!!