Draw a line on JLabel and JPanel [closed]

1

I'm finishing a game of the old woman, and I would like that when someone wins the game, a line is drawn on the line, column or diagonal, on which the game was completed. I'll post my code below:

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

It also takes all the decisions of the game, setting X or O on a particular Label

When the player clicks on it

All board checks, if one player has won, if it is complete, are made

Tray that I 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;


    }



}
    
asked by anonymous 27.06.2014 / 15:20

1 answer

0

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

But focused on solving the problem:

  

Draw the line when the game is over

Draw in a line above the Swing components, something like 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);
    }
}
    
27.06.2014 / 16:24