Draw a line on Jlabel and Jpanel

Asked

Viewed 380 times

1

I am finishing an old game, and I would like when someone wins the game, a line was drawn on the line, column or diagonal, in which the game was completed. I’ll post my code below:

This is the game class, where it defines the Labels, Buttons, Panels, etc.

It also makes all game decisions, setting X or O on a particular Label

When the player such click on it

All board checks, if any player has won, if he is complete, are done

Tray I’m gonna put it down.

public class Jogo extends javax.swing.JFrame {

    private static JButton botaoJogar;
    private static JLabel labelJogador2;
    static JPanel panel1, panel2, panel3;
    static JPanel panel4, panel5, panel6;
    static JPanel panel7, panel8, panel9;
    private static JLabel labelVezJogador;
    private static JLabel labelO;
    private static JLabel labelX;
    private static JLabel labelJogador1;
    static JLabel label1, label2, label3;
    static JLabel label4, label5, label6;
    static JLabel label7, label8, label9;
    private static int flag = 0, flag2 = 0;
    private String nome, nome2;

    Font f = new Font("SansSerif", Font.BOLD, 40); 
    static Tabuleiro tabuleiro = new Tabuleiro();


    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Jogo inst = new Jogo();
                inst.setLocationRelativeTo(null);
                inst.setVisible(true);
                inst.setLocation(0, 0);
                inst.setSize(500, 500);

            }
        });
    }

    public Jogo() {
        super();
        initGUI();
    }

    private void initGUI() {
        try {
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            getContentPane().setLayout(null);



            {
                botaoJogar = new JButton();
                botaoJogar.setText("Jogar");
                botaoJogar.setBounds(180, 28, 145, 41);
                getContentPane().add(botaoJogar);
                botaoJogar.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent arg0) {
                        tabuleiro.zeraTabuleiro();


                        flag2 = 0;



                        nome = JOptionPane.showInputDialog(null, "Informe o nome do jogador 1: ");
                        labelJogador1.setText(nome.toUpperCase());

                        nome2 = JOptionPane.showInputDialog(null, "Informe o nome do jogador 2: ");
                        labelJogador2.setText(nome2.toUpperCase());

                        vezJogador1();

                        acao();


                    }
                });
            }
            {
                labelJogador1 = new JLabel();
                getContentPane().add(labelJogador1);
                labelJogador1.setText("Jogador 1");
                labelJogador1.setBounds(37, 61, 97, 35);
            }
            {
                labelX = new JLabel();
                getContentPane().add(labelX);
                labelX.setText("X");
                labelX.setBounds(54, 88, 15, 14);
            }
            {
                labelO = new JLabel();
                getContentPane().add(labelO);
                labelO.setText("O");
                labelO.setBounds(394, 88, 15, 14);
            }
            {
                labelJogador2 = new JLabel();
                getContentPane().add(labelJogador2);
                labelJogador2.setText("Jogador 2");
                labelJogador2.setBounds(375, 61, 97, 35);
            }
            {
                labelVezJogador = new JLabel();
                getContentPane().add(labelVezJogador);
                labelVezJogador.setText("Vez do Jogador: ");
                labelVezJogador.setBounds(192, 102, 200, 24);

            }

            {
                panel1 = new JPanel();
                panel1.setBounds(158, 152, 60, 60);
                panel1.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
                getContentPane().add(panel1);
                panel1.setVisible(true);
            }
            {
                label1 = new JLabel();
                label1.setFont(f);
                label1.setBounds(184, 152, 60, 60);
                panel1.add(label1);
                label1.setVisible(false);
            }
            {
                panel2 = new JPanel();
                getContentPane().add(panel2);
                panel2.setBounds(218, 152, 60, 60);
                panel2.setVisible(true);
                panel2.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
            }

            {
                label2 = new JLabel();
                label2.setFont(f);
                label2.setBounds(243, 152, 60, 60);
                panel2.add(label2);
                label2.setVisible(false);
            }
            {
                panel3 = new JPanel();
                getContentPane().add(panel3);
                panel3.setBounds(278, 152, 60, 60);
                panel3.setVisible(true);
                panel3.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
            }
            {
                label3 = new JLabel();
                label3.setFont(f);
                label3.setBounds(302, 152, 60, 60);
                panel3.add(label3);
                label3.setVisible(false);
            }
            {
                panel4 = new JPanel();
                getContentPane().add(panel4);
                panel4.setBounds(158, 212, 60, 60);
                panel4.setVisible(true);
                panel4.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
            }
            {
                label4 = new JLabel();
                label4.setFont(f);
                label4.setBounds(184, 213, 60, 60);
                panel4.add(label4);
                label4.setVisible(false);
            }
            {
                panel5 = new JPanel();
                getContentPane().add(panel5);
                panel5.setBounds(218, 212, 60, 60);
                panel5.setVisible(true);
                panel5.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
            }
            {
                label5 = new JLabel();
                label5.setFont(f);
                label5.setBounds(243, 212, 60, 60);
                panel5.add(label5);
                label5.setVisible(false);
            }
            {
                panel6 = new JPanel();
                getContentPane().add(panel6);
                panel6.setBounds(278, 212, 60, 60);
                panel6.setVisible(true);
                panel6.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
            }
            {
                label6 = new JLabel();
                label6.setFont(f);
                label6.setBounds(302, 213, 60, 60);
                panel6.add(label6);
                label6.setVisible(false);
            }
            {
                panel7 = new JPanel();
                getContentPane().add(panel7);
                panel7.setBounds(158, 272, 60, 60);
                panel7.setVisible(true);
                panel7.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
            }
            {
                label7 = new JLabel();
                label7.setFont(f);
                label7.setBounds(184, 273, 60, 60);
                panel7.add(label7);
                label7.setVisible(false);
            }
            {
                panel8 = new JPanel();
                getContentPane().add(panel8);
                panel8.setBounds(218, 272, 60, 60);
                panel8.setVisible(true);
                panel8.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
            }
            {
                label8 = new JLabel();
                label8.setFont(f);
                label8.setBounds(243, 273, 60, 60);
                panel8.add(label8);
                label8.setVisible(false);
            }
            {
                panel9 = new JPanel();
                getContentPane().add(panel9);
                panel9.setBounds(278, 272, 60, 60);
                panel9.setVisible(true);
                panel9.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
            }
            {
                label9 = new JLabel();
                label9.setFont(f);
                label9.setBounds(302, 273, 60, 60);
                panel9.add(label9);
                label9.setVisible(false);
            }
            linha.setBounds(158, 172, 180, 180);
            linha.setBackground(Color.black);

            getContentPane().add(linha);



            pack();
//            this.setSize(500, 400);
        } catch (Exception e) {
            //add your error handling code here
            e.printStackTrace();
        }
    }

    public void acao(){
        panel1.addMouseListener(new java.awt.event.MouseAdapter(){ 
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                   if(panel1.isEnabled()){
                    if(flag == 1){
                           alteraLabelJogador1(label1);
                           panel1.setEnabled(false);

                    }
                    else if(flag == 2){
                        alteraLabelJogador2(label1);
                        panel1.setEnabled(false);
                    }
                   }
            }
        });


        panel2.addMouseListener(new java.awt.event.MouseAdapter(){ 
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if(panel2.isEnabled()){
                    if(flag == 1){
                        alteraLabelJogador1(label2);
                        panel2.setEnabled(false);

                    }
                    else if(flag == 2){
                        alteraLabelJogador2(label2);
                        panel2.setEnabled(false);
                    }
                }
            }
        });

        panel3.addMouseListener(new java.awt.event.MouseAdapter(){ 
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if(panel3.isEnabled()){
                    if(flag == 1){
                        alteraLabelJogador1(label3);
                        panel3.setEnabled(false);
                    }
                    else if(flag == 2){
                        alteraLabelJogador2(label3);
                        panel3.setEnabled(false);
                    }
                }
            }
        });

        panel4.addMouseListener(new java.awt.event.MouseAdapter(){ 
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if(panel4.isEnabled()){
                    if(flag == 1){
                        alteraLabelJogador1(label4);
                        panel4.setEnabled(false);

                    }
                    else if(flag == 2){
                        alteraLabelJogador2(label4);
                        panel4.setEnabled(false);
                    }
                }
            }
        });

        panel5.addMouseListener(new java.awt.event.MouseAdapter(){ 
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                   if(panel5.isEnabled()){
                    if(flag == 1){
                        alteraLabelJogador1(label5);
                        panel5.setEnabled(false);
                    }
                    else if(flag == 2){
                        alteraLabelJogador2(label5);
                        panel5.setEnabled(false);
                    }
                }
            }
        });

        panel6.addMouseListener(new java.awt.event.MouseAdapter(){ 
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if(panel6.isEnabled()){
                    if(flag == 1){
                        alteraLabelJogador1(label6);
                        panel6.setEnabled(false);
                    }
                    else if(flag == 2){
                        alteraLabelJogador2(label6);
                        panel6.setEnabled(false);
                    }
                }
            }
        });

        panel7.addMouseListener(new java.awt.event.MouseAdapter(){ 
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if(panel7.isEnabled()){
                    if(flag == 1){
                        alteraLabelJogador1(label7);
                        panel7.setEnabled(false);
                    }
                    else if(flag == 2){
                        alteraLabelJogador2(label7);
                        panel7.setEnabled(false);
                    }
                }
            }
        });

        panel8.addMouseListener(new java.awt.event.MouseAdapter(){ 
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if(panel8.isEnabled()){
                    if(flag == 1){
                        alteraLabelJogador1(label8);
                        panel8.setEnabled(false);
                    }
                    else if(flag == 2){
                        alteraLabelJogador2(label8);
                        panel8.setEnabled(false);
                    }
                }
            }
        });

        panel9.addMouseListener(new java.awt.event.MouseAdapter(){ 
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if(panel9.isEnabled()){
                    if(flag == 1){
                        alteraLabelJogador1(label9);
                        panel9.setEnabled(false);
                    }
                    else if(flag == 2){
                        alteraLabelJogador2(label9);
                        panel9.setEnabled(false);
                    }
                }
            }
        });

    }


    public static void vezJogador1(){
        labelVezJogador.setText("Vez do Jogador: " + labelJogador1.getText().toUpperCase());
        flag = 1;
    }
    public static void vezJogador2(){
        labelVezJogador.setText("Vez do Jogador: " + labelJogador2.getText().toUpperCase());
        flag = 2;
    }



    public static void desabilitaPanels(){
        panel1.setEnabled(false);
        panel2.setEnabled(false);
        panel3.setEnabled(false);
        panel4.setEnabled(false);
        panel5.setEnabled(false);
        panel6.setEnabled(false);
        panel7.setEnabled(false);
        panel8.setEnabled(false);
        panel9.setEnabled(false);
    }

    public static void alteraLabelJogador1(JLabel label){
        label.setText("X");
        label.setVisible(true);

        checar();

        if(flag2 == 0 && tabuleiro.tabuleiroCompleto()){
            labelVezJogador.setText(" ");    
            Velha();
            JOptionPane.showMessageDialog(null ,"DEU VELHA!");
        }

        if(flag2 == 0 && !tabuleiro.tabuleiroCompleto()){
            vezJogador2();
        }


    }

    public static void alteraLabelJogador2(JLabel label){
        label.setText("O");
        label.setVisible(true);

        checar();

        if(flag2 == 0 && tabuleiro.tabuleiroCompleto()){
            labelVezJogador.setText(" ");
            Velha();
            JOptionPane.showMessageDialog(null,"DEU VELHA!");
        }

        if(flag2 == 0 && !tabuleiro.tabuleiroCompleto()){
            vezJogador1();
        }

    }


    public static int checar(){
        int num;
        num = tabuleiro.checaLinhas();
        if(num == 1){
            flag2 = 1;
            labelVezJogador.setText("");
            desabilitaPanels();
            JOptionPane.showMessageDialog(null, "Jogador " + labelJogador1.getText() + " venceu o jogo!");

            return 1;
        }
        else if(num == 0){
            flag2 = 1;
            labelVezJogador.setText("");
            desabilitaPanels();
            JOptionPane.showMessageDialog(null, "Jogador " + labelJogador2.getText() + " venceu o jogo!");
            return 1;
        }
        num = tabuleiro.checaColunas();
        if(num == 1){
            flag2 = 1;
            labelVezJogador.setText("");
            desabilitaPanels();
            JOptionPane.showMessageDialog(null, "Jogador " + labelJogador1.getText() + " venceu o jogo!");
            return 1;
        }
        else if(num == 0){
            flag2 = 1;
            labelVezJogador.setText("");
            desabilitaPanels();
            JOptionPane.showMessageDialog(null, "Jogador " + labelJogador2.getText() + " venceu o jogo!");
            return 1;
        }
        num = tabuleiro.checaDiagonais();
        if(num == 1){
            flag2 = 1;
            labelVezJogador.setText("");
            desabilitaPanels();
            JOptionPane.showMessageDialog(null, "Jogador " + labelJogador1.getText() + " venceu o jogo!");
            return 1;
        }
        else if(num == 0){
            flag2 = 1;
            labelVezJogador.setText("");
            desabilitaPanels();
            JOptionPane.showMessageDialog(null, "Jogador " + labelJogador2.getText() + " venceu o jogo!");
            return 1;
        }
        return 0;

    }

    public static void Velha(){
        panel1.setBackground(Color.red);
        panel2.setBackground(Color.red);
        panel3.setBackground(Color.red);
        panel4.setBackground(Color.red);
        panel5.setBackground(Color.red);
        panel6.setBackground(Color.red);
        panel7.setBackground(Color.red);
        panel8.setBackground(Color.red);
        panel9.setBackground(Color.red);
    }


}

Classe Tabuleiro

    public class Tabuleiro {

    Jogo jogo = new Jogo();

    public Tabuleiro(){
        zeraTabuleiro();
    }

    public void zeraTabuleiro() {
        jogo.label1.setText(" ");
        jogo.label2.setText(" ");
        jogo.label3.setText(" ");
        jogo.label4.setText(" ");
        jogo.label5.setText(" ");
        jogo.label6.setText(" ");
        jogo.label7.setText(" ");
        jogo.label8.setText(" ");
        jogo.label9.setText(" ");

        jogo.panel1.setEnabled(true);
        jogo.panel2.setEnabled(true);
        jogo.panel3.setEnabled(true);
        jogo.panel4.setEnabled(true);
        jogo.panel5.setEnabled(true);
        jogo.panel6.setEnabled(true);
        jogo.panel7.setEnabled(true);
        jogo.panel8.setEnabled(true);
        jogo.panel9.setEnabled(true);

        jogo.panel1.setBackground(null);
        jogo.panel2.setBackground(null);
        jogo.panel3.setBackground(null);
        jogo.panel4.setBackground(null);
        jogo.panel5.setBackground(null);
        jogo.panel6.setBackground(null);
        jogo.panel7.setBackground(null);
        jogo.panel8.setBackground(null);
        jogo.panel9.setBackground(null);

    }

    public int checaLinhas(){
            if(jogo.label1.getText().equals("X") && jogo.label2.getText().equals("X") && jogo.label3.getText().equals("X") ){
                return 1;
            }
            if(jogo.label4.getText().equals("X") && jogo.label5.getText().equals("X") && jogo.label6.getText().equals("X") ){
                return 1;
            }
            if(jogo.label7.getText().equals("X") && jogo.label8.getText().equals("X") && jogo.label9.getText().equals("X") ){
                return 1;
            }
            if(jogo.label1.getText().equals("O") && jogo.label2.getText().equals("O") && jogo.label3.getText().equals("O") ){
                return 0;
            }
            if(jogo.label4.getText().equals("O") && jogo.label5.getText().equals("O") && jogo.label6.getText().equals("O") ){
                return 0;
            }
            if(jogo.label7.getText().equals("O") && jogo.label8.getText().equals("O") && jogo.label9.getText().equals("O") ){
                return 0;
            }

        return 2;
    }

    public int checaColunas(){
        if(jogo.label1.getText().equals("X") && jogo.label4.getText().equals("X") && jogo.label7.getText().equals("X") ){
            return 1;
        }
        if(jogo.label2.getText().equals("X") && jogo.label5.getText().equals("X") && jogo.label8.getText().equals("X") ){
            return 1;
        }
        if(jogo.label3.getText().equals("X") && jogo.label6.getText().equals("X") && jogo.label9.getText().equals("X") ){
            return 1;
        }

        if(jogo.label1.getText().equals("O") && jogo.label4.getText().equals("O") && jogo.label7.getText().equals("O") ){
            return 0;
        }
        if(jogo.label2.getText().equals("O") && jogo.label5.getText().equals("O") && jogo.label8.getText().equals("O") ){
            return 0;
        }
        if(jogo.label3.getText().equals("O") && jogo.label6.getText().equals("O") && jogo.label9.getText().equals("O") ){
            return 0;
        }
        return 2;
    }

    public int checaDiagonais(){
        if(jogo.label1.getText().equals("X") && jogo.label5.getText().equals("X") && jogo.label9.getText().equals("X")){
            return 1;
        }
        if(jogo.label3.getText().equals("X") && jogo.label5.getText().equals("X") && jogo.label7.getText().equals("X")){
            return 1;
        }
        if(jogo.label1.getText().equals("O") && jogo.label5.getText().equals("O") && jogo.label9.getText().equals("O")){
            return 0;
        }
        if(jogo.label3.getText().equals("O") && jogo.label5.getText().equals("O") && jogo.label7.getText().equals("O")){
            return 0;
        }
        return 2;
    }

    public boolean tabuleiroCompleto(){

        if((jogo.label1.getText().equals("X") || jogo.label1.getText().equals("O")) && 
                (jogo.label2.getText().equals("X") || jogo.label2.getText().equals("O")) &&
                (jogo.label3.getText().equals("X") || jogo.label3.getText().equals("O")) &&
                (jogo.label4.getText().equals("X")|| jogo.label4.getText().equals("O")) &&
                (jogo.label5.getText().equals("X") || jogo.label5.getText().equals("O")) &&
                (jogo.label6.getText().equals("X") || jogo.label6.getText().equals("O")) &&
                (jogo.label7.getText().equals("X")|| jogo.label7.getText().equals("O")) &&
                (jogo.label8.getText().equals("X")|| jogo.label8.getText().equals("O")) &&
                (jogo.label9.getText().equals("X")|| jogo.label9.getText().equals("O"))){
            return true;
        }
         return false;


    }



}

1 answer

0

In this case I advise you to use the Graphics2D. In fact I advise even refactoring the project and instead of using the components of Swing, draw yourself.

But focused on solving the problem:

Draw line when game is over

Draw in a row on top of the Swing components, something similar to the code below... source: Stackoverflow

public class FrameTest {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Demo");
        Container cp = jf.getContentPane();
        cp.add(new JComponent() {
            public void paintComponent(Graphics g) {
                Graphics2D g2 = (Graphics2D) g;
                g2.setStroke(new BasicStroke(10));
                g2.draw(new Line2D.Float(30, 20, 80, 90));
            }
        });
        jf.setSize(300, 200);
        jf.setVisible(true);
    }
}
  • Man, I don’t understand where you want me to put the code above.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.