interface_grafica.Principal.java Source code

Java tutorial

Introduction

Here is the source code for interface_grafica.Principal.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 * eben julho de 2015, no h problema nenhm, kkkkkkkkkk...
 */
package interface_grafica;

import audio.Tocar;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;
import com.jgoodies.forms.layout.Sizes;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Point;
import procurando_hosts.ConnectionMannager;
import java.awt.event.KeyEvent;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.net.UnknownHostException;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.Border;
import objectos.Constantes;
import objectos.Conversa;
import objectos.Mensagem;
import objectos.Utilizador;
import programando_sockets.Chat;

/**
 *
 * @author eben
 */
public class Principal extends javax.swing.JFrame {

    /**
     * Creates new form Principal
     */
    Chat chat;
    Graphics g;
    public Multimedia multimedia;
    public volatile boolean isMutimideaOn;
    public boolean isNomeFormOn = false;
    public boolean isUserFormOn = false;
    public static ArrayList<UtilizadorForm> utlizadoresForm = new ArrayList();
    public static ArrayList<Conversa> conversas = new ArrayList();
    static Point mouseDownCompCoords;
    public Thread chamar;
    public volatile int novasSMS;

    public Principal(Chat chat) throws IOException, ClassNotFoundException {
        isMutimideaOn = false;
        initComponents();
        this.chat = chat;

        inicializarLabels();
        init();
        desabilitar();
        initBaixo();
        mouseDownCompCoords = null;

    }

    private void initBaixo() {
        jLabel5.setText(Chat.utilizador_0.getNome());
    }

    private void init() {
        jPanel2.setVisible(true);
        jPanel7.setVisible(false);
    }

    //desabilitar
    private void desabilitar() {
        if (jTabbedPane1.getTabCount() == 0) {
            if (jTabbedPane1.isVisible()) {
                jTabbedPane1.setVisible(false);
            }
            jScrollPane2.setVisible(false);
            jLabel2.setVisible(false);

        }
    }

    //desabilitar
    private void abilitar() {
        if (!jTabbedPane1.isVisible()) {
            jTabbedPane1.setVisible(true);
            jScrollPane2.setVisible(true);
            jLabel2.setVisible(true);
        }
    }

    //abilitar form de sms
    public void abilitarSMSForm(boolean value) {
        jTextPane1.setVisible(value);
        jLabel2.setVisible(value);
    }

    //retornar indece da tabpane
    public int retornarTabIndice(Utilizador utilizador) {
        for (int i = 0; i < jTabbedPane1.getTabCount(); i++) {
            Conversa convarsa = (Conversa) jTabbedPane1.getComponentAt(i);
            if (convarsa.getUtilizador().getIp().equals(utilizador.getIp())) {
                return i;
            }
        }
        return -1;
    }

    //public inprimir todos
    private void imprimirListaUtilizadoresForm() {
        jPanel2.removeAll();
        jPanel2.add(jLabel11);
        jPanel2.add(jLabel12);
        jPanel2.add(jLabel13);
        for (int i = 0; i < utlizadoresForm.size(); i++) {
            jPanel2.add(utlizadoresForm.get(i));
            validarEinvalidarTab(i);
        }
        jPanel2.revalidate();
        jPanel2.repaint();
    }

    // verificar
    private void validarEinvalidarTab(int i) {
        try {
            Conversa conversa = (Conversa) jTabbedPane1.getSelectedComponent();
            if (utlizadoresForm.get(i).getUtilizador().getIp().equals(conversa.getUtilizador().getIp())) {
                if (utlizadoresForm.get(i).getUtilizador().getEstado().equals(Constantes.activo)) {
                    abilitarSMSForm(true);
                } else {
                    abilitarSMSForm(false);
                }
            }
        } catch (NullPointerException ex) {
        }
    }

    //public inprimir todos
    private void imprimirListaUtilizadoresFormActivos() {
        jPanel2.removeAll();
        jPanel2.add(jLabel11);
        jPanel2.add(jLabel12);
        jPanel2.add(jLabel13);
        for (int i = 0; i < utlizadoresForm.size(); i++) {
            if (utlizadoresForm.get(i).getUtilizador().getEstado().equals(Constantes.activo)) {
                jPanel2.add(utlizadoresForm.get(i));
                validarEinvalidarTab(i);
            }
        }
        jPanel2.revalidate();
        jPanel2.repaint();
    }

    //public inprimir todos
    private void imprimirListaUtilizadoresFormInactivos() {
        jPanel2.removeAll();
        jPanel2.add(jLabel11);
        jPanel2.add(jLabel12);
        jPanel2.add(jLabel13);
        for (int i = 0; i < utlizadoresForm.size(); i++) {
            if (utlizadoresForm.get(i).getUtilizador().getEstado().equals(Constantes.inactivo)) {
                jPanel2.add(utlizadoresForm.get(i));
                validarEinvalidarTab(i);
            }
        }
        jPanel2.revalidate();
        jPanel2.repaint();
    }

    //remover user da tela e da lista
    public void removerUserDaTela(int i) {
        if (-1 == i) {
        } else {
            jPanel2.remove(utlizadoresForm.get(i));
            jPanel2.revalidate();
            jPanel2.repaint();
        }
    }

    //listar Users
    public void actualizarUsers() {
        atualizarListaUtilizadoresForm(ConnectionMannager.listarUtilizadores());
    }

    //retornar usersForm dado um utilizador
    public int retornarUserForm(Utilizador utilizador) {
        for (int i = 0; i < utlizadoresForm.size(); i++) {
            if (utlizadoresForm.get(i).getUtilizador().getIp().equals(utilizador.getIp())) {
                return i;
            }
        }
        return -1;
    }

    public void atualizarListaUtilizadoresForm(ArrayList<Utilizador> utilizadores) {

        utlizadoresForm.clear();
        for (int i = 0; i < utilizadores.size(); i++) {
            utlizadoresForm.add(new UtilizadorForm(this, utilizadores.get(i)));
        }
        imprimirListaUtilizadoresForm();
    }

    /**
     * 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.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLayeredPane1 = new javax.swing.JLayeredPane();
        jPanel2 = new javax.swing.JPanel();
        jLabel11 = new javax.swing.JLabel();
        jLabel12 = new javax.swing.JLabel();
        jLabel13 = new javax.swing.JLabel();
        jPanel7 = new javax.swing.JPanel();
        jTextField1 = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        jPanel4 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jSeparator1 = new javax.swing.JSeparator();
        jPanel5 = new javax.swing.JPanel();
        jLabel5 = new javax.swing.JLabel();
        jPanel3 = new javax.swing.JPanel();
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextPane1 = new javax.swing.JTextPane();
        jLabel2 = new javax.swing.JLabel();
        jPanel8 = new javax.swing.JPanel();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jLabel10 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("LanChat");
        setBackground(new java.awt.Color(225, 232, 240));
        setBounds(new java.awt.Rectangle(410, 180, 0, 0));
        setMinimumSize(new java.awt.Dimension(540, 380));
        setUndecorated(true);
        setPreferredSize(new java.awt.Dimension(540, 380));
        setResizable(false);
        addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseDragged(java.awt.event.MouseEvent evt) {
                formMouseDragged(evt);
            }
        });
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                formMousePressed(evt);
            }

            public void mouseReleased(java.awt.event.MouseEvent evt) {
                formMouseReleased(evt);
            }
        });
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentHidden(java.awt.event.ComponentEvent evt) {
                formComponentHidden(evt);
            }
        });
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowActivated(java.awt.event.WindowEvent evt) {
                formWindowActivated(evt);
            }

            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }

            public void windowDeactivated(java.awt.event.WindowEvent evt) {
                formWindowDeactivated(evt);
            }

            public void windowOpened(java.awt.event.WindowEvent evt) {
                formWindowOpened(evt);
            }
        });
        getContentPane().setLayout(null);

        jPanel1.setBackground(new java.awt.Color(232, 205, 197));
        jPanel1.setMinimumSize(new java.awt.Dimension(400, 340));
        jPanel1.setPreferredSize(new java.awt.Dimension(400, 350));
        jPanel1.setLayout(null);

        jPanel2.setBackground(new java.awt.Color(232, 205, 197));
        jPanel2.setMaximumSize(new java.awt.Dimension(190, 320));
        jPanel2.setMinimumSize(new java.awt.Dimension(190, 320));
        jPanel2.setPreferredSize(new java.awt.Dimension(190, 320));
        jPanel2.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));

        jLabel11.setBackground(new java.awt.Color(220, 220, 251));
        jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel11.setText("Todos");
        jLabel11.setMaximumSize(new java.awt.Dimension(63, 24));
        jLabel11.setMinimumSize(new java.awt.Dimension(63, 24));
        jLabel11.setOpaque(true);
        jLabel11.setPreferredSize(new java.awt.Dimension(63, 24));
        jLabel11.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jLabel11MouseClicked(evt);
            }

            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jLabel11MouseEntered(evt);
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                jLabel11MouseExited(evt);
            }
        });
        jPanel2.add(jLabel11);

        jLabel12.setBackground(new java.awt.Color(213, 233, 220));
        jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel12.setText("Activos");
        jLabel12.setMaximumSize(new java.awt.Dimension(64, 24));
        jLabel12.setMinimumSize(new java.awt.Dimension(64, 24));
        jLabel12.setOpaque(true);
        jLabel12.setPreferredSize(new java.awt.Dimension(64, 24));
        jLabel12.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jLabel12MouseClicked(evt);
            }

            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jLabel12MouseEntered(evt);
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                jLabel12MouseExited(evt);
            }
        });
        jPanel2.add(jLabel12);

        jLabel13.setBackground(new java.awt.Color(249, 224, 224));
        jLabel13.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel13.setText("Inactivos");
        jLabel13.setMaximumSize(new java.awt.Dimension(63, 24));
        jLabel13.setMinimumSize(new java.awt.Dimension(63, 24));
        jLabel13.setOpaque(true);
        jLabel13.setPreferredSize(new java.awt.Dimension(63, 24));
        jLabel13.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jLabel13MouseClicked(evt);
            }

            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jLabel13MouseEntered(evt);
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                jLabel13MouseExited(evt);
            }
        });
        jPanel2.add(jLabel13);

        jPanel7.setBackground(new java.awt.Color(204, 204, 255));
        jPanel7.setOpaque(false);

        jTextField1.setBackground(new java.awt.Color(202, 198, 198));
        jTextField1.setBorder(null);

        jLabel6.setBackground(new java.awt.Color(202, 198, 198));
        jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel6.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/icons/save_user.png"))); // NOI18N
        jLabel6.setOpaque(true);
        jLabel6.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jLabel6MouseClicked(evt);
            }

            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jLabel6MouseEntered(evt);
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                jLabel6MouseExited(evt);
            }
        });

        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(jPanel7Layout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel7Layout.createSequentialGroup().addContainerGap()
                        .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 131, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jLabel6,
                                javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap()));
        jPanel7Layout
                .setVerticalGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel7Layout.createSequentialGroup().addGap(55, 55, 55)
                                .addGroup(jPanel7Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                        .addComponent(jTextField1).addComponent(jLabel6,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, 33, Short.MAX_VALUE))
                                .addContainerGap(232, Short.MAX_VALUE)));

        javax.swing.GroupLayout jLayeredPane1Layout = new javax.swing.GroupLayout(jLayeredPane1);
        jLayeredPane1.setLayout(jLayeredPane1Layout);
        jLayeredPane1Layout.setHorizontalGroup(
                jLayeredPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGroup(jLayeredPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
        jLayeredPane1Layout
                .setVerticalGroup(jLayeredPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGroup(jLayeredPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
        jLayeredPane1.setLayer(jPanel2, javax.swing.JLayeredPane.DEFAULT_LAYER);
        jLayeredPane1.setLayer(jPanel7, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jPanel1.add(jLayeredPane1);
        jLayeredPane1.setBounds(0, 0, 190, 320);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(40, 20, 190, 320);

        jPanel4.setBackground(new java.awt.Color(238, 231, 216));

        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/icons/users.png"))); // NOI18N
        jLabel1.setMinimumSize(new java.awt.Dimension(32, 32));
        jLabel1.setPreferredSize(new java.awt.Dimension(32, 32));
        jLabel1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jLabel1MouseClicked(evt);
            }

            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jLabel1MouseEntered(evt);
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                jLabel1MouseExited(evt);
            }
        });

        jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/icons/def.png"))); // NOI18N
        jLabel3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jLabel3MouseEntered(evt);
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                jLabel3MouseExited(evt);
            }
        });

        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/icons/edit.png"))); // NOI18N
        jLabel4.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jLabel4MouseClicked(evt);
            }

            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jLabel4MouseEntered(evt);
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                jLabel4MouseExited(evt);
            }
        });

        jSeparator1.setBackground(new java.awt.Color(232, 205, 197));
        jSeparator1.setForeground(new java.awt.Color(232, 205, 197));

        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(jPanel4Layout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel4Layout.createSequentialGroup()
                        .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 40,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGroup(jPanel4Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                        .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING,
                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
        jPanel4Layout.setVerticalGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel4Layout.createSequentialGroup()
                        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 41,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 40,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 174, Short.MAX_VALUE)
                        .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jLabel3)
                        .addContainerGap()));

        getContentPane().add(jPanel4);
        jPanel4.setBounds(0, 20, 40, 320);

        jPanel5.setBackground(new java.awt.Color(216, 235, 249));
        jPanel5.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
        jPanel5.setMinimumSize(new java.awt.Dimension(480, 33));
        jPanel5.setPreferredSize(new java.awt.Dimension(480, 33));
        jPanel5.setLayout(null);

        jLabel5.setFont(new java.awt.Font("MS Reference Sans Serif", 0, 11)); // NOI18N
        jLabel5.setForeground(new java.awt.Color(79, 75, 75));
        jLabel5.setText("jLabel5");
        jPanel5.add(jLabel5);
        jLabel5.setBounds(10, 0, 120, 30);

        getContentPane().add(jPanel5);
        jPanel5.setBounds(0, 340, 230, 40);

        jPanel3.setBackground(new java.awt.Color(216, 235, 249));
        jPanel3.setLayout(null);

        jTabbedPane1.setBackground(new java.awt.Color(255, 255, 255));
        jPanel3.add(jTabbedPane1);
        jTabbedPane1.setBounds(0, 0, 310, 300);

        jScrollPane2.setBorder(null);

        jTextPane1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(125, 130, 217)));
        jTextPane1.setMinimumSize(new java.awt.Dimension(3, 16));
        jTextPane1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextPane1KeyPressed(evt);
            }
        });
        jScrollPane2.setViewportView(jTextPane1);

        jPanel3.add(jScrollPane2);
        jScrollPane2.setBounds(10, 310, 240, 40);

        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/icons/interface (1).png"))); // NOI18N
        jLabel2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(125, 130, 217)));
        jLabel2.setMinimumSize(new java.awt.Dimension(50, 40));
        jLabel2.setPreferredSize(new java.awt.Dimension(50, 40));
        jLabel2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jLabel2MouseClicked(evt);
            }

            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jLabel2MouseEntered(evt);
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                jLabel2MouseExited(evt);
            }
        });
        jPanel3.add(jLabel2);
        jLabel2.setBounds(260, 310, 40, 40);

        getContentPane().add(jPanel3);
        jPanel3.setBounds(230, 20, 310, 360);

        jPanel8.setBackground(new java.awt.Color(229, 230, 230));
        jPanel8.setLayout(null);

        jLabel7.setBackground(new java.awt.Color(244, 244, 244));
        jLabel7.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/icons/arrows (1).png"))); // NOI18N
        jLabel7.setOpaque(true);
        jLabel7.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jLabel7MouseClicked(evt);
            }

            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jLabel7MouseEntered(evt);
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                jLabel7MouseExited(evt);
            }
        });
        jPanel8.add(jLabel7);
        jLabel7.setBounds(480, 0, 30, 20);

        jLabel8.setBackground(new java.awt.Color(244, 244, 244));
        jLabel8.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/icons/square (3).png"))); // NOI18N
        jLabel8.setOpaque(true);
        jLabel8.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jLabel8MouseClicked(evt);
            }

            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jLabel8MouseEntered(evt);
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                jLabel8MouseExited(evt);
            }
        });
        jPanel8.add(jLabel8);
        jLabel8.setBounds(510, 0, 30, 20);

        jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel9.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/icons/shapes.png"))); // NOI18N
        jPanel8.add(jLabel9);
        jLabel9.setBounds(0, 0, 30, 20);

        jLabel10.setBackground(new java.awt.Color(102, 102, 102));
        jLabel10.setFont(new java.awt.Font("MS Reference Sans Serif", 0, 11)); // NOI18N
        jLabel10.setForeground(new java.awt.Color(51, 51, 51));
        jLabel10.setText("LanChat");
        jPanel8.add(jLabel10);
        jLabel10.setBounds(30, 0, 60, 20);

        getContentPane().add(jPanel8);
        jPanel8.setBounds(0, 0, 540, 20);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    //Metodo para adicionar conversa
    public int adicionarConversa(Conversa conversa) {
        for (int i = 0; i < conversas.size(); i++) {
            if (conversas.get(i).getUtilizador().getIp().equals(conversa.getUtilizador().getIp())) {
                return i;
            }
        }
        conversas.add(conversa);
        return -1;
    }

    //imprimit mensagem
    public void imprimirSMS(String sms, String usuarioTipo, Conversa convers, Utilizador utilizador) {
        Conversa conversa = null;
        if (usuarioTipo.equals("usuario_remoto")) {
            conversa = retornarConversaPorUtilizador(utilizador);
            colocarConversaNaTela(conversa);
        } else {
            conversa = convers;
        }

        CellConstraints cc = new CellConstraints();
        JLabel vazio = new JLabel(" ");
        vazio.setFont(new Font("Ariel", Font.PLAIN, 3));

        conversa.getLayout().appendRow(new RowSpec(Sizes.DEFAULT));
        conversa.getPainel().add(vazio, cc.xy(1, conversa.getLayout().getRowCount()));

        conversa.getLayout().appendRow(new RowSpec(Sizes.DEFAULT));

        if (usuarioTipo.equals("usuario_remoto")) {
            conversa.getPainel().add(new DesignComponentes().xyBalao(g, sms, usuarioTipo),
                    cc.xy(1, conversa.getLayout().getRowCount(), CellConstraints.LEFT, CellConstraints.DEFAULT));
            Tocar.tocarSom(getClass().getResource("/audio/audio_files/sms.wav"));
        } else {
            conversa.getPainel().add(new DesignComponentes().xyBalao(g, sms, usuarioTipo),
                    cc.xy(1, conversa.getLayout().getRowCount()));
        }

        conversa.validate();

        conversa.getVerticalScrollBar().setValue(conversa.getVerticalScrollBar().getMaximum());
    }

    public Conversa retornarConversaPorUtilizador(Utilizador utilizador) {
        for (int i = 0; i < conversas.size(); i++) {
            if (conversas.get(i).getUtilizador().getIp().equals(utilizador.getIp())) {
                return conversas.get(i);
            }
        }
        return null;
    }

    public void colocarConversaNaTela(Conversa conversa) {
        if (conversa.isConversaNaTela) {
            jTabbedPane1.setSelectedComponent(conversa);
        } else {
            jTabbedPane1.add(conversa.getUtilizador().getNome(), conversa);
        }
    }

    //adicionar conversa na tela
    public void novaConversa(Utilizador utilizador, int totalTabs) {
        Border paddingBorder = BorderFactory.createEmptyBorder(5, 5, 5, 5);
        Border scrollBorder = BorderFactory.createEmptyBorder(0, 0, 0, 0);
        FormLayout layout = new FormLayout("right:pref:grow", "fill:default:grow,default");
        JPanel painel = new JPanel(layout);
        Conversa conversa = new Conversa(layout, painel, utilizador, this);

        conversa.getVerticalScrollBar().setBorder(null);

        conversa.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        conversa.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        conversa.setBorder(BorderFactory.createCompoundBorder(null, scrollBorder));
        conversa.getPainel().setBorder(BorderFactory.createCompoundBorder(null, paddingBorder));

        int index = adicionarConversa(conversa);
        if (index == -1) {
            jTabbedPane1.add(utilizador.getNome(), conversa);
            jTabbedPane1.setSelectedIndex(totalTabs);
            jTabbedPane1.setIconAt(totalTabs,
                    new ImageIcon(getClass().getResource("/recursos/icons/close_tab.png")));
        } else {
            jTabbedPane1.add(utilizador.getNome(), conversas.get(index));
            jTabbedPane1.setIconAt(jTabbedPane1.indexOfComponent(conversas.get(index)),
                    new ImageIcon(getClass().getResource("/recursos/icons/close_tab.png")));
            jTabbedPane1.setSelectedIndex(jTabbedPane1.indexOfComponent(conversas.get(index)));
        }
    }

    private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened
    }//GEN-LAST:event_formWindowOpened

    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing

    }//GEN-LAST:event_formWindowClosing

    public void abrirTab_0(Utilizador utilizador) {
        abilitar();
        int totalTabs = jTabbedPane1.getTabCount();
        novaConversa(utilizador, totalTabs);
    }

    private void mandarMensagem() {
        Conversa conversa = (Conversa) jTabbedPane1.getComponentAt(jTabbedPane1.getSelectedIndex());
        imprimirSMS(jTextPane1.getText(), "usuario_local", conversa, null);
        chat.cliente.escrever(new Mensagem(Mensagem.sms_simples, jTextPane1.getText(), Chat.utilizador_0),
                conversa.getUtilizador());
        jTextPane1.setText(null);
    }

    public void iniciarMultimediaChat(Utilizador utilizador, String chamarOUatender) {
        if ("atender".equals(chamarOUatender)) {
            abrirJanelaMultimidea(utilizador, chamarOUatender);
        } else if ("chamar".equals(chamarOUatender)) {
            abrirJanelaMultimidea(utilizador, chamarOUatender);
        } else if ("atender_widget".equals(chamarOUatender)) {
            abrirJanelaMultimidea(utilizador, chamarOUatender);
        }
    }

    private void abrirJanelaMultimidea(Utilizador utilizador, String chamarOUatender) {
        if (isMutimideaOn == false) {
            isMutimideaOn = true;
            switch (chamarOUatender) {
            case "chamar":
                chamar = null;
                multimedia = new Multimedia(this, utilizador);
                multimedia.setVisible(true);
                multimedia.emissor();
                chamar = new Chamar(utilizador, multimedia);
                chamar.start();
                break;
            case "atender":
                multimedia = new Multimedia(this, utilizador);
                multimedia.setVisible(true);
                break;
            case "atender_widget":
                multimedia = new Multimedia(this, utilizador);
                chat.widgetChamada = new WidgetChamada(utilizador, chat);
                chat.widgetChamada.setVisible(true);
                break;
            }
        }
    }

    private class Chamar extends Thread {

        Utilizador utilizador;
        Multimedia multimedia;

        public Chamar(Utilizador utilizador, Multimedia multimedia) {
            this.utilizador = utilizador;
            this.multimedia = multimedia;

        }

        @Override
        public void run() {
            try {
                chat.cliente.escrever(new Mensagem(Mensagem.sms_multimedia_chat_chamada, Chat.utilizador_0),
                        utilizador);
                Thread.sleep(20000);
                multimedia.fecharMultimedia();
                return;
            } catch (InterruptedException ex) {
                return;
            }
        }

    }

    private void inicializarLabels() {
        jLabel1.setBackground(new Color(222, 196, 189));
        jLabel2.setBackground(new Color(222, 196, 189));
        jLabel3.setBackground(new Color(222, 196, 189));
        jLabel4.setBackground(new Color(222, 196, 189));
    }

    private void jLabel1MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel1MouseEntered
        jLabel1.setOpaque(true);
        jLabel1.repaint();
    }//GEN-LAST:event_jLabel1MouseEntered

    private void jLabel4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel4MouseClicked
        jTextField1.setText(Chat.utilizador_0.getNome());
        jPanel2.setVisible(false);
        jPanel7.setVisible(true);

    }//GEN-LAST:event_jLabel4MouseClicked

    private void jLabel1MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel1MouseExited
        jLabel1.setOpaque(false);
        jLabel1.repaint();
    }//GEN-LAST:event_jLabel1MouseExited

    private void jLabel4MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel4MouseEntered
        jLabel4.setOpaque(true);
        jLabel4.repaint();
    }//GEN-LAST:event_jLabel4MouseEntered

    private void jLabel4MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel4MouseExited
        jLabel4.setOpaque(false);
        jLabel4.repaint();
    }//GEN-LAST:event_jLabel4MouseExited

    private void jLabel3MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel3MouseEntered
        jLabel3.setOpaque(true);
        jLabel3.repaint();
    }//GEN-LAST:event_jLabel3MouseEntered

    private void jLabel3MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel3MouseExited
        jLabel3.setOpaque(false);
        jLabel3.repaint();
    }//GEN-LAST:event_jLabel3MouseExited

    private void jLabel2MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel2MouseEntered
        jLabel2.setOpaque(true);
        jLabel2.repaint();
    }//GEN-LAST:event_jLabel2MouseEntered

    private void jLabel2MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel2MouseExited
        jLabel2.setOpaque(false);
        jLabel2.repaint();
    }//GEN-LAST:event_jLabel2MouseExited

    private void jLabel2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel2MouseClicked
        mandarMensagem();
    }//GEN-LAST:event_jLabel2MouseClicked

    private void jTextPane1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextPane1KeyPressed
        if (evt.getExtendedKeyCode() == KeyEvent.VK_ENTER) {
            mandarMensagem();
        }
    }//GEN-LAST:event_jTextPane1KeyPressed

    private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel1MouseClicked
        jPanel7.setVisible(false);
        jPanel2.setVisible(true);
    }//GEN-LAST:event_jLabel1MouseClicked

    public boolean editarUtilizador(String nome) throws IOException {
        if (!nome.isEmpty()) {
            try (BufferedWriter ficheiro_nome = new BufferedWriter(new FileWriter("id.txt"))) {
                try {
                    ficheiro_nome.write(" " + nome);
                    ficheiro_nome.close();
                    Chat.utilizador_0.setNome(nome);
                    initBaixo();
                } catch (IOException ex) {
                    Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        } else {
            return false;
        }
        return true;
    }

    private void jLabel6MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel6MouseClicked
        try {
            if (editarUtilizador(jTextField1.getText())) {
                jPanel2.setVisible(true);
                jPanel7.setVisible(false);
            }

        } catch (IOException ex) {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_jLabel6MouseClicked

    private void jLabel6MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel6MouseEntered
        jLabel6.setBackground(new Color(153, 153, 153));
        jLabel6.setOpaque(true);
        jLabel6.repaint();
    }//GEN-LAST:event_jLabel6MouseEntered

    private void jLabel6MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel6MouseExited
        jLabel6.setBackground(new Color(202, 198, 198));
        jLabel6.setOpaque(true);
        jLabel6.repaint();

    }//GEN-LAST:event_jLabel6MouseExited

    private void formMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseReleased
        mouseDownCompCoords = null;
    }//GEN-LAST:event_formMouseReleased

    private void formMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMousePressed
        mouseDownCompCoords = evt.getPoint();
    }//GEN-LAST:event_formMousePressed

    private void formMouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseDragged
        Point currCoords = evt.getLocationOnScreen();
        this.setLocation(currCoords.x - mouseDownCompCoords.x, currCoords.y - mouseDownCompCoords.y);

    }//GEN-LAST:event_formMouseDragged

    private void jLabel8MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel8MouseClicked

        this.setVisible(false);
        this.dispose();

    }//GEN-LAST:event_jLabel8MouseClicked

    private void jLabel8MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel8MouseEntered
        jLabel8.setBackground(new Color(195, 193, 193));
        jLabel8.setOpaque(true);
        jLabel8.repaint();
    }//GEN-LAST:event_jLabel8MouseEntered

    private void jLabel8MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel8MouseExited
        jLabel8.setBackground(new Color(244, 244, 244));
        jLabel8.setOpaque(true);
        jLabel8.repaint();
    }//GEN-LAST:event_jLabel8MouseExited

    private void jLabel7MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel7MouseClicked
        this.setState(Frame.ICONIFIED);
    }//GEN-LAST:event_jLabel7MouseClicked

    private void jLabel7MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel7MouseEntered
        jLabel7.setBackground(new Color(195, 193, 193));
        jLabel7.setOpaque(true);
        jLabel7.repaint();
    }//GEN-LAST:event_jLabel7MouseEntered

    private void jLabel7MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel7MouseExited
        jLabel7.setBackground(new Color(244, 244, 244));
        jLabel7.setOpaque(true);
        jLabel7.repaint();
    }//GEN-LAST:event_jLabel7MouseExited

    private void formComponentHidden(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentHidden

    }//GEN-LAST:event_formComponentHidden

    private void formWindowActivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowActivated
        if (this.isVisible()) {
            chat.principal.novasSMS = 0;
            chat.widget.redimencionarWidget(-1);
        }
    }//GEN-LAST:event_formWindowActivated

    private void formWindowDeactivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowDeactivated
        if (!this.isVisible()) {
            novasSMS = 0;
            chat.widget.redimencionarWidget(1);
        }
    }//GEN-LAST:event_formWindowDeactivated

    private void jLabel11MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel11MouseClicked
        imprimirListaUtilizadoresForm();
    }//GEN-LAST:event_jLabel11MouseClicked

    private void jLabel12MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel12MouseClicked
        imprimirListaUtilizadoresFormActivos();
    }//GEN-LAST:event_jLabel12MouseClicked

    private void jLabel13MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel13MouseClicked
        imprimirListaUtilizadoresFormInactivos();
    }//GEN-LAST:event_jLabel13MouseClicked

    private void jLabel11MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel11MouseEntered
        jLabel11.setBackground(new Color(194, 195, 233));
        jLabel11.setOpaque(true);
        jLabel11.repaint();
    }//GEN-LAST:event_jLabel11MouseEntered

    private void jLabel11MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel11MouseExited
        jLabel11.setBackground(new Color(220, 220, 251));
        jLabel11.setOpaque(true);
        jLabel11.repaint();
    }//GEN-LAST:event_jLabel11MouseExited

    private void jLabel12MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel12MouseExited
        // TODO add your handling code here:[213,233,220]
        jLabel12.setBackground(new Color(213, 233, 220));
        jLabel12.setOpaque(true);
        jLabel12.repaint();
    }//GEN-LAST:event_jLabel12MouseExited

    private void jLabel12MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel12MouseEntered
        jLabel12.setBackground(new Color(162, 224, 175));
        jLabel12.setOpaque(true);
        jLabel12.repaint();
    }//GEN-LAST:event_jLabel12MouseEntered

    private void jLabel13MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel13MouseExited
        jLabel13.setBackground(new Color(249, 224, 224));
        jLabel13.setOpaque(true);
        jLabel13.repaint();
    }//GEN-LAST:event_jLabel13MouseExited

    private void jLabel13MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel13MouseEntered
        jLabel13.setBackground(new Color(230, 167, 158));
        jLabel13.setOpaque(true);
        jLabel13.repaint();
    }//GEN-LAST:event_jLabel13MouseEntered

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel13;
    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.JLayeredPane jLayeredPane1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JPanel jPanel8;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextPane jTextPane1;
    // End of variables declaration//GEN-END:variables
}