Não sei como abstrair estas situações

0 respostas
java
PapaiLu

Olá.
Não sei como fazer:
Tenho algumas classes no programa e quero o seguinte:
A cada jogada, alterar o texto do JLabel que está no pnltopo (lbl3).
O mesmo com os botões que estão em pnlbaixo, preciso alterar seus estados e incluir algumas funções.
Será que algum pode me ajudar nisso?

Obrigado.

Segue o codigo:

JogoDaVelha4.java

package jogodavelha4;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class JogoDaVelha4 extends JFrame {

    public static void main(String[] args) {
        try {
            TelaJogo telajogo = new TelaJogo();
            telajogo.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            telajogo.setVisible(true);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

}

TelaJogo.java

package jogodavelha4;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TelaJogo extends JFrame {
    
    public TelaJogo() {
        Dimension size = new Dimension(600, 500);
        setTitle("JOGO DA VELHA");
        setSize(size);
        setMinimumSize(size);
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
		
        JPanel container = new JPanel();
        container.setBackground(Color.BLUE);
        container.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        container.setLayout(new BorderLayout(5, 5));
        container.add(new pnltopo(this), BorderLayout.NORTH);
        container.add(new pnlbaixo(this), BorderLayout.SOUTH);
        container.add(new pnllado(this), BorderLayout.EAST);
        container.add(new pnlcentro(this), BorderLayout.CENTER);
		
        setContentPane(container);
        
        JPanel jpTabuleiro = new JPanel();
        jpTabuleiro.setBackground(Color.cyan);
        jpTabuleiro.setLayout(new GridLayout(3,3));
    }
}

pnlbaixo.java

package jogodavelha4;

import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JPanel;

public class pnlbaixo extends JPanel {

    private static final Font Med_14 = new Font("Arial Narrow", Font.BOLD, 14);
    private static final Font Med_24 = new Font("Arial Narrow", Font.BOLD, 24);
    
    private final TelaJogo telajogo;
    
    JButton VerPlacar = new JButton();
    JButton NovoJogo = new JButton();
    JButton Sair = new JButton();
        
    public pnlbaixo(TelaJogo telajogo) {
        this.telajogo = telajogo;
        
        JPanel pnlbtn = new JPanel();
        pnlbtn.setPreferredSize(new Dimension(500, 50));
        
        Dimension size = new Dimension(150, 45);
        VerPlacar.setPreferredSize(size);
        NovoJogo.setPreferredSize(size);
        Sair.setPreferredSize(size);
                
        VerPlacar.setFont(Med_24);        
        NovoJogo.setFont(Med_24);        
        Sair.setFont(Med_24);
            
        VerPlacar.setText("Ver Placares");
        NovoJogo.setText("Novo Jogo");
        Sair.setText("Sair");
                
        pnlbtn.add(VerPlacar);
        pnlbtn.add(NovoJogo);
        pnlbtn.add(Sair);
        
        VerPlacar.setEnabled(false);
        NovoJogo.setEnabled(false);
        Sair.setEnabled(true);
        
        VerPlacar.addActionListener(event -> VerPlacar());
        NovoJogo.addActionListener(event -> NovoJogo());
        Sair.addActionListener(event -> Sair());
        
        add(pnlbtn);
    }

    private void VerPlacar() {
        
    }
    
    private void NovoJogo() {
        for (int n = 0;n < 9; n++) {
            //pnlcentro.bt[n].setText("");
            //pnlcentro.bt[n].setEnabled(true);
        }
        NovoJogo.setEnabled(false);
    }
    
    private void Sair() {
        System.exit(0);
    }
}

pnlcentro.java

package jogodavelha4;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;

public class pnlcentro extends JPanel {
    
    private final TelaJogo telajogo;
    
    private final JPanel jpfundo = new JPanel();
    private static final Font Gra_72 = new Font("Action Jackson", Font.BOLD, 72);
    int nBotoes = 9;//qtde de botoes para o jogo
    private JButton[] bt = new JButton[nBotoes];//matriz de botoes para o jogo
    private String mensagem = "";//aviso (no topo) para indicar a vez
    int Jogadas[][] = new int [3][3];//guarda a posição das jogadas
    int QtdeJogadas;
    String sinal = "X"; //sinal do jogador atual
    String ganhador;    //guarda o jogador que venceu
    String jogador1;    //guarda o jogador 1
    String jogador2;    //guarda o jogador 2
    //===============================
    public pnlcentro(TelaJogo telajogo) {
        this.telajogo = telajogo;
        Dimension size = new Dimension(450, 320);
        jpfundo.setPreferredSize(new Dimension(size));
        jpfundo.setBackground(java.awt.Color.black);
        jpfundo.setLayout(new GridLayout(3,3));
        add(jpfundo);
        //--------------
        CriaBotoes();
        TestaJogadas();
    }
    //===============================
    public void CriaBotoes() {
        for (int i = 0; i < nBotoes; i++) {
            bt[i] = new JButton();
            bt[i].setFont(Gra_72);
            jpfundo.add(bt[i]);
        }
    }
    //===============================
    public void TestaJogadas() {
        bt[0].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {EscreveSinal(0); VerificaSeGanhou(sinal, 0); TrocarSinal(0);}});        
        //--------------
        bt[1].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) { EscreveSinal(1); VerificaSeGanhou(sinal, 1); TrocarSinal(1);}});
        //--------------
        bt[2].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) { EscreveSinal(2); VerificaSeGanhou(sinal, 2); TrocarSinal(2);}});
        //================================================
        bt[3].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) { EscreveSinal(3); VerificaSeGanhou(sinal, 3); TrocarSinal(3);}});
        //--------------
        bt[4].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) { EscreveSinal(4); VerificaSeGanhou(sinal, 4); TrocarSinal(4);}});
        //--------------
        bt[5].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) { EscreveSinal(5); VerificaSeGanhou(sinal, 5); TrocarSinal(5);}});
        //================================================
        bt[6].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) { EscreveSinal(6); VerificaSeGanhou(sinal, 6); TrocarSinal(6);}});
        //--------------
        bt[7].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) { EscreveSinal(7); VerificaSeGanhou(sinal, 7); TrocarSinal(7);}});
        //--------------
        bt[8].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) { EscreveSinal(8); VerificaSeGanhou(sinal, 8); TrocarSinal(8);}});
    }
   //===============================
    private void EscreveSinal(int botao) {
        bt[botao].setText(sinal);
        bt[botao].setEnabled(false);
        //
        QtdeJogadas++;  //guarda a qtde de jogadas
    }
    //===============================
    private void TrocarSinal(int botao) {    //Controle das jogadas
        if (sinal == "X") {
            //pnltopo. lbl3.setText("Vez do Jogador 2"); <---- este é o meu problema
            sinal = "O";
        } else {
            sinal = "X";
            //pnlt.lbl3.setText("Vez do Jogador 1"); <----
        }
    }
    //===============================
    private void Ganhou(String sinal) {
        DesligaBotoes();
        //pnltopo.lbl2.setText("O Ganhador foi: ");
        //pnltopo.lbl3.setText(sinal);
    }
    //===============================
    private void VerificaSeGanhou(String sinal, int botao) {
        //HORIZONTAIS(3) //----------------
        if ((bt[0].getText().equals(sinal)) &&
           (bt[1].getText().equals(sinal)) &&
           (bt[2].getText().equals(sinal))) {
            
           bt[0].setForeground(Color.green);
           bt[1].setForeground(Color.green);
           bt[2].setForeground(Color.green);
           Ganhou(sinal);
        }
        //----------------
        if ((bt[3].getText().equals(sinal)) &&
           (bt[4].getText().equals(sinal)) &&
           (bt[5].getText().equals(sinal))) {
            
           bt[3].setForeground(Color.green);
           bt[4].setForeground(Color.green);
           bt[5].setForeground(Color.green);
           Ganhou(sinal);
        }
        //----------------
        if ((bt[6].getText().equals(sinal)) &&
           (bt[7].getText().equals(sinal)) &&
           (bt[8].getText().equals(sinal))) {
            
           bt[6].setForeground(Color.green);
           bt[7].setForeground(Color.green);
           bt[8].setForeground(Color.green);
           Ganhou(sinal);
        }
        //VERTICAIS(3) //----------------
        if ((bt[0].getText().equals(sinal)) &&
           (bt[3].getText().equals(sinal)) &&
           (bt[6].getText().equals(sinal))) {
            
           bt[0].setForeground(Color.green);
           bt[3].setForeground(Color.green);
           bt[6].setForeground(Color.green);
           Ganhou(sinal);
        }
        //----------------
        if ((bt[1].getText().equals(sinal)) &&
           (bt[4].getText().equals(sinal)) &&
           (bt[7].getText().equals(sinal))) {
            
           bt[1].setForeground(Color.green);
           bt[4].setForeground(Color.green);
           bt[7].setForeground(Color.green);
           Ganhou(sinal);
        }
        //----------------
        if ((bt[2].getText().equals(sinal)) &&
           (bt[5].getText().equals(sinal)) &&
           (bt[8].getText().equals(sinal))) {
            
           bt[2].setForeground(Color.green);
           bt[5].setForeground(Color.green);
           bt[8].setForeground(Color.green);
           Ganhou(sinal);
        }
        //DIAGONAIS(2) //----------------
        if ((bt[0].getText().equals(sinal)) &&
           (bt[4].getText().equals(sinal)) &&
           (bt[8].getText().equals(sinal))) {
            
           bt[0].setForeground(Color.green);
           bt[4].setForeground(Color.green);
           bt[8].setForeground(Color.green);
           Ganhou(sinal);
        }
        //----------------
        if ((bt[2].getText().equals(sinal)) &&
           (bt[4].getText().equals(sinal)) &&
           (bt[6].getText().equals(sinal))) {
            
           bt[2].setForeground(Color.green);
           bt[4].setForeground(Color.green);
           bt[6].setForeground(Color.green);
           Ganhou(sinal);
        }
        //VELHA() //----------------
        if (QtdeJogadas >= nBotoes) {
            if ((bt[0].getText() != " ") &&
               (bt[1].getText() != " ") &&
               (bt[2].getText() != " ") &&
               (bt[3].getText() != " ") &&
               (bt[4].getText() != " ") &&
               (bt[5].getText() != " ") &&
               (bt[6].getText() != " ") &&
               (bt[7].getText() != " ") &&
               (bt[8].getText() != " ")) {
               for (int i = 0; i < nBotoes; i++) {
                    bt[i].setForeground(Color.red);
               }
               DeuVelha();
    } } }
    //===============================
    private void DeuVelha() {
        DesligaBotoes();
        //pnltopo.//pnlt.lbl3.setText("---- Deu Velha ----"); <----
        //baixo.NovoJogo.setEnabled(true);
    }
    //===============================
    private void DesligaBotoes() {
        for (int n = 0;n < nBotoes; n++) {
            bt[n].setEnabled(false);
    } }
}

pnllado.java

package jogodavelha4;

import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class pnllado extends JPanel {
    
    private final TelaJogo telajogo;
    
    private static final Font Media_24 = new Font("Arial Narrow", Font.BOLD, 22);
    private static final Font Grande_42 = new Font("Action Jackson", Font.BOLD, 60);
    
    private final JPanel jpfundo = new JPanel();
    private final JPanel jpjogador1 = new JPanel();
    private final JPanel jpjogador2 = new JPanel();
    private final JPanel jpganhador = new JPanel();
    private JLabel lbl11 = new JLabel("JOGADOR 01");
    private JLabel lbl12 = new JLabel("x");
    private JLabel lbl21 = new JLabel("JOGADOR 02");
    private JLabel lbl22 = new JLabel("O");
    private JLabel lbl31 = new JLabel("VENCEDOR");
    private JLabel lbl32 = new JLabel("X");
        
    public pnllado(TelaJogo telajogo) {
        this.telajogo = telajogo;
        jpfundo.setPreferredSize(new Dimension(150,500));
        jpfundo.setBackground(java.awt.Color.red);
        
        Dimension size = new Dimension(150, 100);
        jpjogador1.setPreferredSize(new Dimension(size));
        jpjogador2.setPreferredSize(new Dimension(size));
        jpganhador.setPreferredSize(new Dimension(size));
        
        jpjogador1.setBackground(java.awt.Color.ORANGE);
        jpjogador2.setBackground(java.awt.Color.YELLOW);
        jpganhador.setBackground(java.awt.Color.PINK);
        
        jpjogador1.setEnabled(false);
        jpjogador2.setEnabled(false);
        jpganhador.setEnabled(false);
        
        Dimension tam1 = new Dimension(130, 20);
        lbl11.setPreferredSize(tam1);
        lbl21.setPreferredSize(tam1);
        lbl31.setPreferredSize(tam1);
                
        Dimension tam2 = new Dimension(130, 80);
        lbl12.setPreferredSize(tam2);
        lbl22.setPreferredSize(tam2);
        lbl32.setPreferredSize(tam2);
        
        lbl11.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        lbl21.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        lbl31.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        
        lbl12.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        lbl22.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        lbl32.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        
        lbl11.setFont(Media_24);
        lbl21.setFont(Media_24);
        lbl31.setFont(Media_24);
                
        lbl12.setFont(Grande_42);
        lbl22.setFont(Grande_42);
        lbl32.setFont(Grande_42);
        
        jpjogador1.add(lbl11);
        jpjogador1.add(lbl12);
        
        jpjogador2.add(lbl21);
        jpjogador2.add(lbl22);
        
        jpganhador.add(lbl31);
        jpganhador.add(lbl32);
        
        jpfundo.add(jpjogador1);
        jpfundo.add(jpjogador2);
        jpfundo.add(jpganhador);
        
        add(jpfundo);
    }
}

pnltopo.java

ckage jogodavelha4;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class pnltopo extends JPanel {
    
    private final TelaJogo telajogo;
    
    private static final Font Media_24 = new Font("Arial Narrow", Font.BOLD, 24);
    private static final Font Grande_42 = new Font("Action Jackson", Font.BOLD, 42);
    
    public JLabel lbl1 = new JLabel();
    public JLabel lbl2 = new JLabel();
    public JLabel lbl3 = new JLabel();
    
    public pnltopo(TelaJogo telajogo) {
        this.telajogo = telajogo;
        Dimension tam0 = new Dimension(500, 50);
        JPanel pnllbl = new JPanel();
        pnllbl.setPreferredSize(tam0);
        
        Dimension tam1 = new Dimension(250, 30);
        lbl1.setPreferredSize(tam1);
        lbl1.setFont(Media_24);
        lbl1.setHorizontalAlignment(javax.swing.JTextField.LEFT);
        lbl1.setText("JOGO DA VELHA");
        
        Dimension tam2 = new Dimension(150, 30);
        lbl2.setPreferredSize(tam2);
        lbl2.setFont(Media_24);
        lbl2.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        lbl2.setText("JOGADOR -  ");
        
        Dimension tam3 = new Dimension(50, 50);
        lbl3.setPreferredSize(tam3);
        lbl3.setFont(Grande_42);
        lbl3.setForeground(Color.GREEN);
        lbl3.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        lbl3.setText("X");
        
        pnllbl.add(lbl1);
        pnllbl.add(lbl2);
        pnllbl.add(lbl3);
        
        add(pnllbl);
    }
}

Obrigado por qualquer ajuda.

Criado 10 de dezembro de 2018
Respostas 0
Participantes 1