Interfaz.rubiktimer.java Source code

Java tutorial

Introduction

Here is the source code for Interfaz.rubiktimer.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.
 */
package Interfaz;

import Datos.Nodo;
import Logica.Lista;
import Logica.Graficas;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.Timer;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.DecimalFormat;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import org.jfree.chart.ChartPanel;

/**
 *
 * @author Christian
 */
public class rubiktimer extends javax.swing.JFrame implements KeyListener {

    //Listas para cada tipo de cubo
    Lista listaT = new Lista(); //lista paramaetro
    Lista listaT2x2 = new Lista(); //Solves Cubo2x2
    Lista listaT3x3 = new Lista(); //Solves Cubo3x3
    Lista listaT4x4 = new Lista(); //Solves Cubo4x4
    //Lista listaTMegaminx = new Lista();      //Solves CuboMegaminx
    //Lista listaTPyra = new Lista();      //Solves CuboPyraminx
    //Lista listaTMirror = new Lista();      //Solves CuboMirror3x3
    Lista lista5mej = new Lista(); //Lista de 5 mejores tiempos Paramatro
    Lista lista5mej2x2 = new Lista(); //Lista 5 mejores tiempos2x2
    Lista lista5mej3x3 = new Lista(); //Lista 5 mejores tiempos2x2
    Lista lista5mej4x4 = new Lista(); //Lista 5 mejores tiempos2x2
    Lista lista10mej = new Lista(); //Lista de 10 mejroes tiempos PARAMETRO
    Lista lista10mej2x2 = new Lista(); //Lista 10 mejores tiempos2x2
    Lista lista10mej3x3 = new Lista(); //Lista 10 mejores tiempos2x2
    Lista lista10mej4x4 = new Lista(); //Lista 10 mejores tiempos2x2

    public Graficas miGrafica;
    private Timer t, t_atras; // Tiempos 
    private String Scramble = "Scramble:  F  r  D  l  U  r  u  d  B  f  R  R  d  b  L  U  D  r  f  L"; // Variable Scramble
    private String Scramble4x4 = "";//para el cubo 4x4 es diferene
    private String Scramble_parametro;//Scramble parametro
    private int m, s, cs, aux;//aux espara guardar el tiezmpo atras      //Variables para tiempos
    private int img = -1;//variable para indicar que primero se debe elegir una cateforiade cubo
    private int cuenta_atras; //Varaiable par aconteo atrasSELECCIONen ComboBox
    private int segundos_atras = 0; //Varaiable par aconteo atras
    private int verificador = 0; //Se debe seleccionar primero una categoria de cubo
    private int verifi = 0;
    private int tipoCubScramble;
    private int tipoGuardar;
    private double cent_seg, minutos, tiempo; //variables para conversion de tiempos
    String[] letras_scramble = { "F", "f", "D", "d", "B", "b", "L", "l", "R", "r", "U", "u" };
    String[] letras_scramble4x4 = { "RR", "II", "F", "f", "D", "II", "d", "B", "b", "L", "RR", "l", "R", "r", "U",
            "u", "RR", "II", "FF", "BB" };//Letras para Scramble
    public DecimalFormat decimales = new DecimalFormat("0.00");

    //CONSTRUCTOR DE LA CLASE rubiktimer
    public rubiktimer() {

        addKeyListener(this); //acciones para el teclado
        initComponents(); //compentes(codigo generado)
        this.setSize(1305, 765); //size de la interfaz 
        setLocationRelativeTo(null);//posicion
        t = new Timer(10, acciones); //tiempo prinicipal
        t_atras = new Timer(900, acciones_crono_atras); //tiempo conteo atras

    }

    /**
     * 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() {

        jMenuItem1 = new javax.swing.JMenuItem();
        Tiempo = new javax.swing.JLabel();
        titulo = new javax.swing.JLabel();
        logo = new javax.swing.JLabel();
        manoizq = new javax.swing.JLabel();
        manoder = new javax.swing.JLabel();
        Mej_Tiempo = new javax.swing.JLabel();
        Peor_Tiempo = new javax.swing.JLabel();
        Prom = new javax.swing.JLabel();
        labelScramble = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        panel = new javax.swing.JPanel();
        panel3x3 = new javax.swing.JPanel();
        panel4x4 = new javax.swing.JPanel();
        panel2x2 = new javax.swing.JPanel();
        labelImagen = new javax.swing.JLabel();
        elegir_cat = new javax.swing.JLabel();
        Tiempo_Espera = new javax.swing.JLabel();
        Selecc_tipoCubo = new javax.swing.JComboBox<>();
        Selecc_cuentraAtras = new javax.swing.JComboBox<>();
        infor = new javax.swing.JLabel();
        mejores10list = new javax.swing.JLabel();
        mejores5list = new javax.swing.JLabel();
        AVG10 = new javax.swing.JLabel();
        AVG5 = new javax.swing.JLabel();
        NumSolves = new javax.swing.JLabel();
        panelGrafica = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jMenuBar1 = new javax.swing.JMenuBar();
        Menu1 = new javax.swing.JMenu();
        Limpiar2x2 = new javax.swing.JMenuItem();
        Limpiar3x3 = new javax.swing.JMenuItem();
        Limpiar4x4 = new javax.swing.JMenuItem();
        limpiarTodo = new javax.swing.JMenuItem();
        jMenu1 = new javax.swing.JMenu();
        jMenu4 = new javax.swing.JMenu();
        guardar2x2 = new javax.swing.JMenuItem();
        guardar3x3 = new javax.swing.JMenuItem();
        guardar4x4 = new javax.swing.JMenuItem();
        jMenu5 = new javax.swing.JMenu();
        guardarCargar2x2 = new javax.swing.JMenuItem();
        guardarCargar3x3 = new javax.swing.JMenuItem();
        guardarCargar4x4 = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();
        cargarArchivo = new javax.swing.JMenuItem();
        ayudaScramble = new javax.swing.JMenu();
        aydaScramble = new javax.swing.JMenuItem();
        jMenu3 = new javax.swing.JMenu();
        videoBasico = new javax.swing.JMenuItem();
        videoFridrichRED = new javax.swing.JMenuItem();
        videoFridrich = new javax.swing.JMenuItem();

        jMenuItem1.setText("jMenuItem1");

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("RUBIK CUBE TIMER");
        setBackground(new java.awt.Color(0, 0, 153));
        getContentPane().setLayout(null);

        Tiempo.setFont(new java.awt.Font("Lucida Sans", 0, 125)); // NOI18N
        Tiempo.setForeground(new java.awt.Color(255, 255, 255));
        Tiempo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        Tiempo.setText("00:00.00");
        getContentPane().add(Tiempo);
        Tiempo.setBounds(190, 170, 554, 146);

        titulo.setFont(new java.awt.Font("Franklin Gothic Demi", 3, 60)); // NOI18N
        titulo.setForeground(new java.awt.Color(255, 255, 255));
        titulo.setText("Rubik's Cube Timer");
        getContentPane().add(titulo);
        titulo.setBounds(240, 30, 581, 104);

        logo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/logogiff.gif"))); // NOI18N
        logo.setMaximumSize(new java.awt.Dimension(300, 300));
        logo.setMinimumSize(new java.awt.Dimension(300, 300));
        logo.setName(""); // NOI18N
        logo.setPreferredSize(new java.awt.Dimension(300, 300));
        logo.setRequestFocusEnabled(false);
        getContentPane().add(logo);
        logo.setBounds(40, 10, 150, 160);

        manoizq.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/mi.png"))); // NOI18N
        getContentPane().add(manoizq);
        manoizq.setBounds(20, 160, 160, 160);

        manoder.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/md.png"))); // NOI18N
        getContentPane().add(manoder);
        manoder.setBounds(740, 160, 175, 160);

        Mej_Tiempo.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        Mej_Tiempo.setForeground(new java.awt.Color(255, 255, 255));
        Mej_Tiempo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        Mej_Tiempo.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Mejor Tiempo: ",
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
                javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 16),
                new java.awt.Color(255, 255, 255))); // NOI18N
        getContentPane().add(Mej_Tiempo);
        Mej_Tiempo.setBounds(790, 420, 180, 50);

        Peor_Tiempo.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        Peor_Tiempo.setForeground(new java.awt.Color(255, 255, 255));
        Peor_Tiempo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        Peor_Tiempo.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Peor Tiempo: ",
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
                javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 16),
                new java.awt.Color(255, 255, 255))); // NOI18N
        getContentPane().add(Peor_Tiempo);
        Peor_Tiempo.setBounds(980, 420, 180, 50);

        Prom.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        Prom.setForeground(new java.awt.Color(255, 255, 255));
        Prom.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        Prom.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "AVG Total",
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
                javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 16),
                new java.awt.Color(255, 255, 255))); // NOI18N
        getContentPane().add(Prom);
        Prom.setBounds(980, 490, 180, 50);

        labelScramble.setFont(new java.awt.Font("Microsoft YaHei", 1, 24)); // NOI18N
        labelScramble.setForeground(new java.awt.Color(255, 255, 255));
        labelScramble.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        labelScramble.setText("Scramble:  F  r  D  l  U  r  u  d  B  f  R  R  d  b  L  U  D  r  f  L");
        getContentPane().add(labelScramble);
        labelScramble.setBounds(-10, 330, 950, 33);

        panel.setBackground(new java.awt.Color(0, 0, 0));
        panel.setToolTipText("");
        panel.setFont(new java.awt.Font("Engravers MT", 1, 18)); // NOI18N
        panel.setLayout(new javax.swing.BoxLayout(panel, javax.swing.BoxLayout.PAGE_AXIS));

        panel3x3.setBackground(new java.awt.Color(0, 0, 0));
        panel3x3.setLayout(new javax.swing.BoxLayout(panel3x3, javax.swing.BoxLayout.PAGE_AXIS));
        panel.add(panel3x3);

        panel4x4.setBackground(new java.awt.Color(0, 0, 0));
        panel4x4.setLayout(new javax.swing.BoxLayout(panel4x4, javax.swing.BoxLayout.PAGE_AXIS));
        panel.add(panel4x4);

        panel2x2.setBackground(new java.awt.Color(0, 0, 0));
        panel2x2.setForeground(new java.awt.Color(255, 255, 255));
        panel2x2.setLayout(new javax.swing.BoxLayout(panel2x2, javax.swing.BoxLayout.PAGE_AXIS));
        panel.add(panel2x2);

        jScrollPane2.setViewportView(panel);

        getContentPane().add(jScrollPane2);
        jScrollPane2.setBounds(280, 440, 500, 250);

        labelImagen.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        labelImagen.setForeground(new java.awt.Color(255, 255, 255));
        labelImagen.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        labelImagen.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        labelImagen.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Cubo Actual",
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
                javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 18),
                new java.awt.Color(255, 255, 255))); // NOI18N
        getContentPane().add(labelImagen);
        labelImagen.setBounds(10, 440, 250, 240);

        elegir_cat.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        elegir_cat.setForeground(new java.awt.Color(255, 255, 255));
        elegir_cat.setText("Antes del primer solve se debe elegir una categoria de cubo");
        getContentPane().add(elegir_cat);
        elegir_cat.setBounds(920, 10, 420, 40);

        Tiempo_Espera.setFont(new java.awt.Font("Tahoma", 0, 20)); // NOI18N
        Tiempo_Espera.setForeground(new java.awt.Color(255, 255, 255));
        Tiempo_Espera.setText("Cuenta Atras:");
        getContentPane().add(Tiempo_Espera);
        Tiempo_Espera.setBounds(290, 120, 150, 50);

        Selecc_tipoCubo.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        Selecc_tipoCubo.setModel(new javax.swing.DefaultComboBoxModel<>(
                new String[] { "Seleccion Categoria de Cubo", "3x3x3", "4x4x4", "2x2x2" }));
        Selecc_tipoCubo.setFocusable(false);
        Selecc_tipoCubo.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                Selecc_tipoCuboItemStateChanged(evt);
            }
        });
        getContentPane().add(Selecc_tipoCubo);
        Selecc_tipoCubo.setBounds(990, 60, 220, 30);

        Selecc_cuentraAtras.setFont(new java.awt.Font("Tahoma", 0, 13)); // NOI18N
        Selecc_cuentraAtras.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "-------------------",
                "Sin Cuenta Atras", "3 Segundos", "5 Segundo", "10 Segundos", "15 Segundos" }));
        Selecc_cuentraAtras.setFocusable(false);
        Selecc_cuentraAtras.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                Selecc_cuentraAtrasItemStateChanged(evt);
            }
        });
        getContentPane().add(Selecc_cuentraAtras);
        Selecc_cuentraAtras.setBounds(480, 130, 140, 40);

        infor.setFont(new java.awt.Font("Tahoma", 0, 16)); // NOI18N
        infor.setForeground(new java.awt.Color(255, 255, 255));
        infor.setText("Pulse la tecla ESPACIO para iniciar Cuenta Atras, iniciar Cronomero y detener Cronometro");
        getContentPane().add(infor);
        infor.setBounds(170, 380, 670, 20);

        mejores10list.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        mejores10list.setForeground(new java.awt.Color(255, 255, 255));
        mejores10list.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        mejores10list.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "10 Mejores",
                javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION,
                new java.awt.Font("Tahoma", 0, 16), new java.awt.Color(255, 255, 255))); // NOI18N
        getContentPane().add(mejores10list);
        mejores10list.setBounds(1170, 430, 110, 250);

        mejores5list.setFont(new java.awt.Font("Tahoma", 0, 16)); // NOI18N
        mejores5list.setForeground(new java.awt.Color(255, 255, 255));
        mejores5list.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        mejores5list.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "5 Mejores",
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
                javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 16),
                new java.awt.Color(255, 255, 255))); // NOI18N
        getContentPane().add(mejores5list);
        mejores5list.setBounds(790, 560, 180, 130);

        AVG10.setFont(new java.awt.Font("Tahoma", 0, 16)); // NOI18N
        AVG10.setForeground(new java.awt.Color(255, 255, 255));
        AVG10.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        AVG10.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "AVG 10 Mejores",
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
                javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 16),
                new java.awt.Color(51, 255, 0))); // NOI18N
        getContentPane().add(AVG10);
        AVG10.setBounds(980, 630, 180, 50);

        AVG5.setFont(new java.awt.Font("Tahoma", 0, 16)); // NOI18N
        AVG5.setForeground(new java.awt.Color(255, 255, 255));
        AVG5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        AVG5.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "AVG 5 Mejores",
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
                javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 16),
                new java.awt.Color(102, 255, 0))); // NOI18N
        getContentPane().add(AVG5);
        AVG5.setBounds(980, 570, 180, 50);

        NumSolves.setFont(new java.awt.Font("Tahoma", 0, 16)); // NOI18N
        NumSolves.setForeground(new java.awt.Color(255, 255, 255));
        NumSolves.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        NumSolves.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Numero de Solves",
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
                javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 16),
                new java.awt.Color(255, 255, 255))); // NOI18N
        getContentPane().add(NumSolves);
        NumSolves.setBounds(790, 490, 180, 50);

        panelGrafica.setBackground(new java.awt.Color(0, 0, 0));
        panelGrafica.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Desempeo",
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
                javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 16),
                new java.awt.Color(255, 255, 255))); // NOI18N
        panelGrafica.setLayout(new javax.swing.BoxLayout(panelGrafica, javax.swing.BoxLayout.LINE_AXIS));
        getContentPane().add(panelGrafica);
        panelGrafica.setBounds(910, 100, 360, 290);

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/fondo1.jpg"))); // NOI18N
        jLabel1.setText("jLabel1");
        jLabel1.setMaximumSize(new java.awt.Dimension(3000, 3000));
        jLabel1.setPreferredSize(new java.awt.Dimension(1084, 660));
        getContentPane().add(jLabel1);
        jLabel1.setBounds(0, -10, 1380, 750);

        jMenuBar1.setBackground(new java.awt.Color(51, 51, 51));
        jMenuBar1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jMenuBar1.setBorderPainted(false);
        jMenuBar1.setFocusable(false);
        jMenuBar1.setFont(new java.awt.Font("Segoe UI", 0, 18)); // NOI18N

        Menu1.setForeground(new java.awt.Color(255, 255, 255));
        Menu1.setText("Borrar Tiempos");
        Menu1.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N

        Limpiar2x2.setText("Borrar Solves 2 x 2");
        Limpiar2x2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                Limpiar2x2ActionPerformed(evt);
            }
        });
        Menu1.add(Limpiar2x2);

        Limpiar3x3.setText("Borrar Solves 3 x 3");
        Limpiar3x3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                Limpiar3x3ActionPerformed(evt);
            }
        });
        Menu1.add(Limpiar3x3);

        Limpiar4x4.setText("Borrar Solves 4 x 4");
        Limpiar4x4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                Limpiar4x4ActionPerformed(evt);
            }
        });
        Menu1.add(Limpiar4x4);

        limpiarTodo.setText("Borrar Todo");
        limpiarTodo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                limpiarTodoActionPerformed(evt);
            }
        });
        Menu1.add(limpiarTodo);

        jMenuBar1.add(Menu1);

        jMenu1.setForeground(new java.awt.Color(255, 255, 255));
        jMenu1.setText("Guardar Tiempos");
        jMenu1.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N

        jMenu4.setText("Guardar Datos para Usuario");

        guardar2x2.setText("2x2");
        guardar2x2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                guardar2x2ActionPerformed(evt);
            }
        });
        jMenu4.add(guardar2x2);

        guardar3x3.setText("3x3");
        guardar3x3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                guardar3x3ActionPerformed(evt);
            }
        });
        jMenu4.add(guardar3x3);

        guardar4x4.setText("4x4");
        guardar4x4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                guardar4x4ActionPerformed(evt);
            }
        });
        jMenu4.add(guardar4x4);

        jMenu1.add(jMenu4);

        jMenu5.setText("Guardar Datos para Cargar");

        guardarCargar2x2.setText("2x2 Guardar para Cargar");
        guardarCargar2x2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                guardarCargar2x2ActionPerformed(evt);
            }
        });
        jMenu5.add(guardarCargar2x2);

        guardarCargar3x3.setText("3x3 Guardar para Cargar");
        guardarCargar3x3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                guardarCargar3x3ActionPerformed(evt);
            }
        });
        jMenu5.add(guardarCargar3x3);

        guardarCargar4x4.setText("4x4 Guardar para Cargar");
        guardarCargar4x4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                guardarCargar4x4ActionPerformed(evt);
            }
        });
        jMenu5.add(guardarCargar4x4);

        jMenu1.add(jMenu5);

        jMenuBar1.add(jMenu1);

        jMenu2.setForeground(new java.awt.Color(255, 255, 255));
        jMenu2.setText("Cargar Datos");
        jMenu2.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N

        cargarArchivo.setText("Cargar Archivo");
        cargarArchivo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cargarArchivoActionPerformed(evt);
            }
        });
        jMenu2.add(cargarArchivo);

        jMenuBar1.add(jMenu2);

        ayudaScramble.setForeground(new java.awt.Color(255, 255, 255));
        ayudaScramble.setText("Que es Scramble?");
        ayudaScramble.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N

        aydaScramble.setText("Que es un Scramble?");
        aydaScramble.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                aydaScrambleActionPerformed(evt);
            }
        });
        ayudaScramble.add(aydaScramble);

        jMenuBar1.add(ayudaScramble);

        jMenu3.setForeground(new java.awt.Color(255, 255, 255));
        jMenu3.setText("Como resolver un cubo de 3x3?");
        jMenu3.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N

        videoBasico.setText("Metodo Basico - Video Tutorial (fuente Youtube, Canal: DaLiWasHereTv)");
        videoBasico.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                videoBasicoActionPerformed(evt);
            }
        });
        jMenu3.add(videoBasico);

        videoFridrichRED.setText("Metodo Fridrich (reducido) - Video Tutorial (fuente Youtube, Canal: TheMaoiSha)");
        videoFridrichRED.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                videoFridrichREDActionPerformed(evt);
            }
        });
        jMenu3.add(videoFridrichRED);

        videoFridrich.setText("Metodo Fridrich (completo) - Video Tutorial (fuente Youtube, Canal Cuby)");
        videoFridrich.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                videoFridrichActionPerformed(evt);
            }
        });
        jMenu3.add(videoFridrich);

        jMenuBar1.add(jMenu3);

        setJMenuBar(jMenuBar1);

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

    public void cerrar() {
        try {
            this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent w) {

                    int valor = JOptionPane.showConfirmDialog(null,
                            "Esta Seguro de cerrar la aplicacion?\nNota:  Asegurese de haber guardado los tiempos obtenidos ",
                            "Cerrar Rubik Cube Timer", JOptionPane.OK_CANCEL_OPTION);
                    if (valor == JOptionPane.OK_OPTION) {
                        JOptionPane.showMessageDialog(null, "Gracias por usar Rubik Cube Timer", "Gracias",
                                JOptionPane.INFORMATION_MESSAGE);
                        System.exit(0);
                    } else if (valor == JOptionPane.CANCEL_OPTION) {
                        System.out.println("Cnacelar Operacion de cerrar");
                    }
                }
            });
            this.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void Selecc_tipoCuboItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_Selecc_tipoCuboItemStateChanged
        // TODO add your handling code here:
        img = Selecc_tipoCubo.getSelectedIndex();
        switch (img) {
        case 1://Se elege el cubo de 3x3
            ++img;
            ImageIcon imagen = new ImageIcon(this.getClass().getResource("/img/3x3.png"));
            labelImagen.setIcon(imagen);
            tipoCubScramble = 0;
            lista10mej = lista10mej3x3;
            lista5mej = lista5mej3x3;
            listaT = listaT3x3;
            panel = panel3x3;
            panel3x3.setVisible(true);
            panel2x2.setVisible(false);
            panel4x4.setVisible(false);
            elegir_cat.setEnabled(false);
            panelGrafica.removeAll();
            actualizar_estad();
            actualizarLabel();
            actualizar_cambio_cat();
            actualizarScramble();
            actualizarGrafica();
            verifi = 1;
            break;
        case 2://Se elife el cubo de 4x4
            ++img;
            ImageIcon imagen2 = new ImageIcon(this.getClass().getResource("/img/4x4.png"));
            labelImagen.setIcon(imagen2);
            tipoCubScramble = 1;
            lista10mej = lista10mej4x4;
            lista5mej = lista5mej4x4;
            listaT = listaT4x4;
            panel = panel4x4;
            panel2x2.setVisible(false);
            panel3x3.setVisible(false);
            panel4x4.setVisible(true);
            elegir_cat.setEnabled(false);
            panelGrafica.removeAll();
            actualizar_estad();
            actualizarLabel();
            actualizar_cambio_cat();
            actualizarScramble4x4();
            actualizarGrafica();
            verifi = 1;
            break;
        case 3://Se elige el cubo de 2x2
            ++img;
            ImageIcon imagen3 = new ImageIcon(this.getClass().getResource("/img/2x2.png"));
            labelImagen.setIcon(imagen3);
            tipoCubScramble = 0;
            lista10mej = lista10mej2x2;
            lista5mej = lista5mej2x2;
            listaT = listaT2x2;
            panel = panel2x2;
            panel2x2.setVisible(true);
            panel3x3.setVisible(false);
            panel4x4.setVisible(false);
            elegir_cat.setEnabled(false);
            panelGrafica.removeAll();
            actualizar_estad();
            actualizarLabel();
            actualizar_cambio_cat();
            actualizarScramble();
            actualizarGrafica();
            verifi = 1;
            break;
        }

    }//GEN-LAST:event_Selecc_tipoCuboItemStateChanged

    private void Selecc_cuentraAtrasItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_Selecc_cuentraAtrasItemStateChanged
        // TODO add your handling code here:
        cuenta_atras = Selecc_cuentraAtras.getSelectedIndex();
        switch (cuenta_atras) {
        case 1:// Sin conteo atras
            segundos_atras = 0;
            aux = segundos_atras;
            break;
        case 2://Conteo Atras de 3 segundos
            segundos_atras = 3;
            aux = segundos_atras;
            break;
        case 3://Conteo Atras de 5 segundos
            segundos_atras = 5;
            aux = segundos_atras;
            break;
        case 4://Conteo Atras de 10 segundos
            segundos_atras = 10;
            aux = segundos_atras;
            break;
        case 5://Conteo Atras de 15 segundos
            segundos_atras = 15;
            aux = segundos_atras;
            break;
        }
    }//GEN-LAST:event_Selecc_cuentraAtrasItemStateChanged

    private void Limpiar3x3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_Limpiar3x3ActionPerformed
        if (img == 2) {
            ConsultaLimpiar dialog = new ConsultaLimpiar(new javax.swing.JFrame(), true, "3 x 3");
            dialog.setVisible(true);
            if (dialog.verif == 1) {
                listaT = new Lista();
                listaT3x3 = new Lista();
                lista5mej = new Lista();
                lista5mej3x3 = new Lista();
                lista10mej = new Lista();
                lista10mej3x3 = new Lista();
                panel3x3.removeAll();
                panel3x3.updateUI();
                panelGrafica.removeAll();
                panelGrafica.updateUI();
                dialog.verif = 0;
                actualizar_estad();
            }
        } else {
            JOptionPane.showMessageDialog(null,
                    "Para eliminar la informacion de esta Categoria tiene que estar dentro de la misma (3x3)",
                    "Ingrese en la categoria 3x3", JOptionPane.INFORMATION_MESSAGE);
        }
    }//GEN-LAST:event_Limpiar3x3ActionPerformed

    private void Limpiar2x2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_Limpiar2x2ActionPerformed
        // TODO add your handling code here:
        if (img == 4) {
            ConsultaLimpiar dialog = new ConsultaLimpiar(new javax.swing.JFrame(), true, "2 x 2");
            dialog.setVisible(true);
            if (dialog.verif == 1) {
                listaT = new Lista();
                listaT2x2 = new Lista();
                lista5mej = new Lista();
                lista5mej2x2 = new Lista();
                lista10mej = new Lista();
                lista10mej2x2 = new Lista();
                panel2x2.removeAll();
                panel2x2.updateUI();
                panelGrafica.removeAll();
                panelGrafica.validate();
                dialog.verif = 0;
                actualizar_estad();
            }
        } else {
            JOptionPane.showMessageDialog(null,
                    "Para eliminar la informacion de esta Categoria tiene que estar dentro de la misma (2x2)",
                    "Ingrese en la categoria 2x2", JOptionPane.INFORMATION_MESSAGE);
        }
    }//GEN-LAST:event_Limpiar2x2ActionPerformed

    private void Limpiar4x4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_Limpiar4x4ActionPerformed
        // TODO add your handling code here:
        if (img == 3) {
            ConsultaLimpiar dialog = new ConsultaLimpiar(new javax.swing.JFrame(), true, "4 x 4");
            dialog.setVisible(true);
            if (dialog.verif == 1) {
                listaT = new Lista();
                listaT4x4 = new Lista();
                lista5mej = new Lista();
                lista5mej4x4 = new Lista();
                lista10mej = new Lista();
                lista10mej4x4 = new Lista();
                panel4x4.removeAll();
                panel4x4.updateUI();
                panel.updateUI();
                panelGrafica.removeAll();
                panelGrafica.validate();
                dialog.verif = 0;
                actualizar_estad();
            }
        } else {
            JOptionPane.showMessageDialog(null,
                    "Para eliminar la informacion de esta Categoria tiene que estar dentro de la misma (4x4)",
                    "Ingrese en la categoria 4x4", JOptionPane.INFORMATION_MESSAGE);
        }
    }//GEN-LAST:event_Limpiar4x4ActionPerformed

    private void guardar3x3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guardar3x3ActionPerformed
        if (listaT3x3.primero != null) {
            GuardarDatos dat = new GuardarDatos();
            dat.guardarArchivo(listaT3x3, "3 x 3", 1);
        } else {
            JOptionPane.showMessageDialog(null, "No puede guardar en un documento una Sesion VACIA (3x3)",
                    "Informacin", JOptionPane.INFORMATION_MESSAGE);
        }
    }//GEN-LAST:event_guardar3x3ActionPerformed

    private void guardar2x2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guardar2x2ActionPerformed
        // TODO add your handling code here:
        if (listaT2x2.primero != null) {
            GuardarDatos dat = new GuardarDatos();
            dat.guardarArchivo(listaT2x2, "2 x 2", 1);
        } else {
            JOptionPane.showMessageDialog(null, "No puede guardar en un documento una Sesion VACIA (2x2)",
                    "Informacin", JOptionPane.INFORMATION_MESSAGE);
        }

    }//GEN-LAST:event_guardar2x2ActionPerformed

    private void guardar4x4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guardar4x4ActionPerformed
        // TODO add your handling code here:
        if (listaT4x4.primero != null) {
            GuardarDatos dat = new GuardarDatos();
            dat.guardarArchivo(listaT4x4, "4 x 4", 1);
        } else {
            JOptionPane.showMessageDialog(null, "No puede guardar en un documento una Sesion VACIA (4x4)",
                    "Sesion Vacia", JOptionPane.INFORMATION_MESSAGE);
        }

    }//GEN-LAST:event_guardar4x4ActionPerformed

    private void limpiarTodoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_limpiarTodoActionPerformed
        // TODO add your handling code here:
        if (verifi != 0) {
            ConsultaLimpiar dialog = new ConsultaLimpiar(new javax.swing.JFrame(), true, "TODAS LAS CATEGORIAS");
            dialog.setVisible(true);
            if (dialog.verif == 1) {
                verifi = 0;
                listaT = new Lista();
                listaT2x2 = new Lista();
                listaT3x3 = new Lista();
                listaT4x4 = new Lista();
                lista5mej = new Lista();
                lista5mej2x2 = new Lista();
                lista5mej3x3 = new Lista();
                lista5mej4x4 = new Lista();
                lista10mej = new Lista();
                lista10mej2x2 = new Lista();
                lista10mej3x3 = new Lista();
                lista10mej4x4 = new Lista();
                panel2x2.removeAll();
                panel3x3.removeAll();
                panel4x4.removeAll();
                panel.removeAll();
                panel.updateUI();
                panelGrafica.removeAll();
                panelGrafica.validate();
                actualizar_estad();
                actualizarLabel();
                actualizarGrafica();
                ;
                dialog.verif = 0;
            }
        } else {
            JOptionPane.showMessageDialog(null, "Todo esta vacio", "Informacion", JOptionPane.INFORMATION_MESSAGE);
        }
    }//GEN-LAST:event_limpiarTodoActionPerformed

    private void aydaScrambleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aydaScrambleActionPerformed
        // TODO add your handling code here:
        AyudaScramble dialog = new AyudaScramble(new javax.swing.JFrame(), true);
        dialog.setVisible(true);
    }//GEN-LAST:event_aydaScrambleActionPerformed

    private void cargarArchivoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cargarArchivoActionPerformed
        // TODO add your handling code here:
        if (listaT.primero == null) {
            JOptionPane.showMessageDialog(null,
                    "El archivo a cargar debe ser un archivo que se guardo en la Opcion (Guardar Datos Para Cargar) y no de la opcion (Guardar Datos Para Usuario), si se intenta cargar un archivo de usuario no se cargara ningun dato",
                    "Informacin", JOptionPane.INFORMATION_MESSAGE);
            CargarDat ventanaVisualizar = new CargarDat();
            ventanaVisualizar.cargArchivo(listaT, lista5mej, lista10mej);
            actualizar_estad();

            Lista nueva = new Lista();
            nueva = listaT;
            Nodo actual;
            actual = nueva.primero;
            while ((actual != null)) {

                JLabel nuevo_tiempo = new JLabel(actual.getDato_string());
                nuevo_tiempo.setFont(new java.awt.Font("Lucida Sans", 0, 25));
                nuevo_tiempo.setForeground(Color.yellow);
                JButton eliminar = new JButton("Eliminar Tiempo");
                eliminar.setFocusable(false);
                JButton Penalizacion = new JButton("Penalizacion +2");
                Penalizacion.setFocusable(false);
                JButton DNF = new JButton("DNF");
                DNF.setFocusable(false);
                /*if (tipoCubScramble == 0) {
                Scramble_parametro = Scramble;
                } else {
                Scramble_parametro = Scramble4x4;
                }*/
                JLabel nuevo_Scramble = new JLabel(actual.getScramble());
                nuevo_Scramble.setFont(new java.awt.Font("Lucida Sans", 0, 15));
                nuevo_Scramble.setForeground(Color.white);
                panel.add(nuevo_tiempo);
                panel.add(nuevo_Scramble);
                panel.add(eliminar);
                panel.add(Penalizacion);
                panel.add(DNF);
                panel.updateUI();

                funcionalidad_botones(nuevo_tiempo, nuevo_Scramble, eliminar, Penalizacion, DNF);

                actual = actual.enlace;
            }
            actualizarGrafica();
            System.out.println("LISTAAAAAAAAA LOOOOOOL ");
            System.out.println(listaT.primero.getDato_string());

        } else {
            JOptionPane.showMessageDialog(null, "No puede guardar en un documento una Sesion VACIA", "Sesion Vacia",
                    JOptionPane.INFORMATION_MESSAGE);
        }

    }//GEN-LAST:event_cargarArchivoActionPerformed

    private void guardarCargar2x2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guardarCargar2x2ActionPerformed
        // TODO add your handling code here:
        if (listaT2x2.primero != null) {
            GuardarDatos dat = new GuardarDatos();
            dat.guardarArchivo(listaT2x2, "2 x 2", 2);
        } else {
            JOptionPane.showMessageDialog(null, "No puede guardar en un documento una Sesion VACIA (2x2)",
                    "Informacin", JOptionPane.INFORMATION_MESSAGE);
        }

    }//GEN-LAST:event_guardarCargar2x2ActionPerformed

    private void guardarCargar3x3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guardarCargar3x3ActionPerformed
        // TODO add your handling code here:
        if (listaT3x3.primero != null) {
            GuardarDatos dat = new GuardarDatos();
            dat.guardarArchivo(listaT3x3, "3 x 3", 2);
        } else {
            JOptionPane.showMessageDialog(null, "No puede guardar en un documento una Sesion VACIA (3x3)",
                    "Informacin", JOptionPane.INFORMATION_MESSAGE);
        }
    }//GEN-LAST:event_guardarCargar3x3ActionPerformed

    private void guardarCargar4x4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guardarCargar4x4ActionPerformed
        // TODO add your handling code here:
        if (listaT4x4.primero != null) {
            GuardarDatos dat = new GuardarDatos();
            dat.guardarArchivo(listaT4x4, "4 x 4", 2);
        } else {
            JOptionPane.showMessageDialog(null, "No puede guardar en un documento una Sesion VACIA (4x4)",
                    "Informacin", JOptionPane.INFORMATION_MESSAGE);
        }
    }//GEN-LAST:event_guardarCargar4x4ActionPerformed

    private void videoBasicoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_videoBasicoActionPerformed
        // TODO add your handling code here:
        Tutorial vid = new Tutorial("https://www.youtube.com/watch_popup?v=zoKpsye580w");
        vid.main(letras_scramble);

    }//GEN-LAST:event_videoBasicoActionPerformed

    private void videoFridrichREDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_videoFridrichREDActionPerformed
        // TODO add your handling code here:
        Tutorial vid = new Tutorial("https://www.youtube.com/watch_popup?v=8-5xNJI3xlI");
        vid.main(letras_scramble);
    }//GEN-LAST:event_videoFridrichREDActionPerformed

    private void videoFridrichActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_videoFridrichActionPerformed
        // TODO add your handling code here:
        Tutorial vid = new Tutorial("https://www.youtube.com/watch_popup?v=d_hR8pn67wA");
        vid.main(letras_scramble);
    }//GEN-LAST:event_videoFridrichActionPerformed

    public void actualizar_estad() { //Actualizar campos de Estadistica
        actualizar_MejorTIempo();
        actualizar_Peor_Tiempo();
        actualizar_Promedio();
        actualizar_list5_mejores();
        actualizarAVG5();
        actualizar_list10_mejores();
        actualizarAVG10();
        actualizarNumSolves();
    }

    public void actualizar_cambio_cat() { //Actualizar label de tiempo cada vez que se cambia la categoria
        m = 0;
        s = 0;
        cs = 0;
        actualizarLabel();
    }

    private ActionListener acciones = new ActionListener() { //Accion del tiempo de cada solve
        @Override
        public void actionPerformed(ActionEvent ae) {
            ++cs;
            if (cs == 100) {
                cs = 0;
                ++s;
            }
            if (s == 60) {
                s = 0;
                ++m;
            }
            actualizarLabel();
        }

    };

    private ActionListener acciones_crono_atras = new ActionListener() { //Accion para el conteo atras
        @Override
        public void actionPerformed(ActionEvent ae) {
            segundos_atras--;
            actualizarLabel_atras();
            if (segundos_atras == -1) {
                t_atras.stop();
                t.start();
            }
        }
    };

    private void actualizarLabel() { //Actualizar el Label del tiempo del solve
        String tiempo_t = (m <= 9 ? "0" : "") + m + ":" + (s <= 9 ? "0" : "") + s + "." + (cs <= 9 ? "0" : "") + cs;
        Tiempo.setText(tiempo_t);
        segundos_atras = aux;
    }

    private void actualizarLabel_atras() { //Actualizar label del conteo atras
        if (segundos_atras == -1) {
            t_atras.stop();
        }
        String tiempo = (segundos_atras <= 9 ? "0" : "") + segundos_atras;
        ;
        Tiempo.setText(tiempo);
    }

    private void actualizarScramble() { //Generador de Scramble
        int x = 0;
        Scramble = "Scramble:   ";
        while (x <= 19) {
            int numRandon = (int) Math.round(Math.random() * 11);
            Scramble = Scramble + "  " + letras_scramble[numRandon];
            x++;
        }
        labelScramble.setText(Scramble);
    }

    private void actualizarScramble4x4() {
        int x = 0;
        Scramble4x4 = "Scramble: ";
        System.out.println("4x4 scramble");
        while (x <= 22) {
            int numRandon = (int) Math.round(Math.random() * 19);
            System.out.println(numRandon);
            Scramble4x4 = Scramble4x4 + "  " + letras_scramble4x4[numRandon];
            x++;
        }
        labelScramble.setText(Scramble4x4);

    }

    private void actualizar_MejorTIempo() { //Acualizar campode mejor tiempo
        if (listaT.primero == null) {
            String lista_vacia = (" Sin Datos");
            Mej_Tiempo.setText(lista_vacia);
        } else {
            String mejor_tiem = (" " + decimales.format(listaT.mejor_tiempo()) + " segundos");
            Mej_Tiempo.setText(mejor_tiem);
        }
    }

    private void actualizar_Peor_Tiempo() { //Actualizar Campode peor tiempo
        if (listaT.primero == null) {
            String lista_vacia = (" Sin Datos");
            Peor_Tiempo.setText(lista_vacia);
        } else {
            String peor_tiem = (" " + decimales.format(listaT.peor_tiempo()) + " segundos");
            Peor_Tiempo.setText(peor_tiem);
        }
    }

    private void actualizar_Promedio() { //Actualizar Campo de Peor Tiempos
        if (listaT.primero == null) {
            String lista_vacia = (" Sin Datos");
            Prom.setText(lista_vacia);
        } else {
            String promd = (" " + decimales.format(listaT.prom_Total()) + " segundos");
            Prom.setText(promd);
        }
    }

    private void actualizar_list5_mejores() {
        if (lista5mej.primero == null) {
            String lista_vacia = ("");
            mejores5list.setText(lista_vacia);
        } else {
            String _mej = (lista5mej.listar5(lista5mej));
            mejores5list.setText(_mej);
        }
    }

    private void actualizarAVG5() {
        if (lista5mej.primero == null) {
            String avg5 = ("");
            AVG5.setText(avg5);
        } else {
            String avg5 = ("" + decimales.format(lista5mej.prom_Total()));
            AVG5.setText(avg5);
        }
    }

    private void actualizar_list10_mejores() {
        if (lista10mej.primero == null) {
            String lista_vacia = ("");
            mejores10list.setText(lista_vacia);
        } else {
            String _mej = (lista10mej.listar5(lista10mej));
            mejores10list.setText(_mej);
        }
    }

    private void actualizarAVG10() {
        if (lista10mej.primero == null) {
            String avg5 = ("");
            AVG10.setText(avg5);
        } else {
            String avg5 = ("" + decimales.format(lista10mej.prom_Total()));
            AVG10.setText(avg5);
        }
    }

    private void actualizarNumSolves() {
        String NumSolvs = ("" + listaT.largoLista());
        NumSolves.setText(NumSolvs);
    }

    private void actualizarGrafica() {
        miGrafica = new Graficas(Graficas.AREA, null);
        Lista x = listaT.obtListaNumSolves(listaT);
        Lista y = listaT;
        miGrafica.agragarGrafica("Grafica Tiempos-Solves", x, y, listaT.largoLista());
        panelGrafica.setLayout(new java.awt.BorderLayout());
        ChartPanel CP = new ChartPanel(miGrafica.obtener());
        panelGrafica.add(CP, BorderLayout.CENTER);
        panelGrafica.validate();
    }

    private void funcionalidad_botones(JLabel nuev_tiempo, JLabel scrambl, JButton elim, JButton penaliz,
            JButton dnf) {

        elim.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                System.out.println("///" + nuev_tiempo.getText() + "///");
                listaT.eliminar(tiempo, nuev_tiempo.getText());
                lista5mej.eliminar(tiempo, nuev_tiempo.getText());
                lista10mej.eliminar(tiempo, nuev_tiempo.getText());
                //lista5mej.actualizar5(lista5mej,listaT);
                //lista10mej.actualizar10(lista10mej,listaT);
                panel.remove(nuev_tiempo);
                panel.remove(scrambl);
                panel.remove(penaliz);
                panel.remove(elim);
                panel.remove(dnf);
                actualizar_estad();
                actualizarGrafica();
                panel.updateUI();

            }

        });
        penaliz.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                lista5mej.penalizacion(nuev_tiempo, nuev_tiempo.getText());
                listaT.penalizacion(nuev_tiempo, nuev_tiempo.getText());
                lista10mej.penalizacion(nuev_tiempo, nuev_tiempo.getText());
                penaliz.setEnabled(false);
                actualizar_estad();
                actualizarGrafica();
                panel.updateUI();
            }

        });
        dnf.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                listaT.eliminar(tiempo, nuev_tiempo.getText());
                lista5mej.eliminar(tiempo, nuev_tiempo.getText());
                lista10mej.eliminar(tiempo, nuev_tiempo.getText());
                nuev_tiempo.setEnabled(false);
                scrambl.setEnabled(false);
                elim.setEnabled(false);
                penaliz.setEnabled(false);
                dnf.setEnabled(false);
                actualizar_estad();
                actualizarGrafica();
                panel.updateUI();
            }

        });

    }

    @Override
    public void keyTyped(KeyEvent ke) {

    }

    @Override
    public void keyPressed(KeyEvent ke) {
        System.out.println("Pulsado");
        if (verifi != 0) {
            if (ke.getKeyCode() == KeyEvent.VK_SPACE) {
                switch (verificador) {
                case 1:
                    // COMIENZA SOLVE
                    t_atras.stop();
                    t.start();
                    actualizarLabel();
                    verificador = 2;
                    break;
                case 0:
                    // CONTEO ATRAS
                    t_atras.start();
                    actualizarLabel_atras();
                    verificador = 1;
                    break;
                case 2:
                    // DETENER SOLVE
                    t.stop();
                    segundos_atras = aux;
                    minutos = 0.00;
                    if (m > 0) {
                        minutos = 60 * (double) m;
                    }

                    cent_seg = (double) cs / 100;
                    tiempo = (double) s + cent_seg + minutos;
                    String tiempo_str = (m <= 9 ? "0" : "") + m + ":" + (s <= 9 ? "0" : "") + s + "."
                            + (cs <= 9 ? "0" : "") + cs;
                    JLabel nuevo_tiempo = new JLabel(tiempo_str);
                    nuevo_tiempo.setFont(new java.awt.Font("Lucida Sans", 0, 25));
                    nuevo_tiempo.setForeground(Color.yellow);
                    JButton eliminar = new JButton("Eliminar Tiempo");
                    eliminar.setFocusable(false);
                    JButton Penalizacion = new JButton("Penalizacion +2");
                    Penalizacion.setFocusable(false);
                    JButton DNF = new JButton("DNF");
                    DNF.setFocusable(false);
                    if (tipoCubScramble == 0) {
                        Scramble_parametro = Scramble;
                    } else {
                        Scramble_parametro = Scramble4x4;
                    }
                    JLabel nuevo_Scramble = new JLabel(Scramble_parametro);
                    nuevo_Scramble.setFont(new java.awt.Font("Lucida Sans", 0, 15));
                    nuevo_Scramble.setForeground(Color.white);
                    panel.add(nuevo_tiempo);
                    panel.add(nuevo_Scramble);
                    panel.add(eliminar);
                    panel.add(Penalizacion);
                    panel.add(DNF);
                    panel.updateUI();

                    listaT.insertarCabezaLista(tiempo, tiempo_str, Scramble_parametro); //lista todos los solves
                    lista5mej.insertarNUMmejores(5, lista5mej, tiempo, nuevo_tiempo, tiempo_str,
                            Scramble_parametro); //lista 5 mejores 
                    lista10mej.insertarNUMmejores(10, lista10mej, tiempo, nuevo_tiempo, tiempo_str,
                            Scramble_parametro); // lista 10 mejores
                    actualizarGrafica();

                    funcionalidad_botones(nuevo_tiempo, nuevo_Scramble, eliminar, Penalizacion, DNF);

                    System.out.println("\tLista Generada 3x3");
                    listaT3x3.visualizar();
                    System.out.println("\tLista Generada 4x4");
                    listaT4x4.visualizar();
                    System.out.println("\tLista Generada 2x2");
                    listaT2x2.visualizar();
                    System.out.println("\tLista 5 mejores");
                    lista5mej.visualizar();
                    System.out.println("\tLista 10 mejores");
                    lista10mej.visualizar();

                    actualizar_estad();
                    verificador = 0;
                    m = 0;
                    s = 0;
                    cs = 0;
                    //actualizarLabel();
                    if (tipoCubScramble == 0) {
                        actualizarScramble();
                    } else {
                        actualizarScramble4x4();
                    }
                    actualizar_estad();
                    actualizarGrafica();
                    verificador = 0;
                    break;
                default:
                    break;
                }
            }
        } else {
            JOptionPane.showMessageDialog(null, "Primero se tiene que escoger una categoria de cubo",
                    "Escoger una Categoria", JOptionPane.INFORMATION_MESSAGE);
        }
    }

    @Override
    public void keyReleased(KeyEvent ke) {

    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel AVG10;
    private javax.swing.JLabel AVG5;
    private javax.swing.JMenuItem Limpiar2x2;
    private javax.swing.JMenuItem Limpiar3x3;
    private javax.swing.JMenuItem Limpiar4x4;
    private javax.swing.JLabel Mej_Tiempo;
    private javax.swing.JMenu Menu1;
    private javax.swing.JLabel NumSolves;
    private javax.swing.JLabel Peor_Tiempo;
    private javax.swing.JLabel Prom;
    private javax.swing.JComboBox<String> Selecc_cuentraAtras;
    private javax.swing.JComboBox<String> Selecc_tipoCubo;
    private javax.swing.JLabel Tiempo;
    private javax.swing.JLabel Tiempo_Espera;
    private javax.swing.JMenuItem aydaScramble;
    private javax.swing.JMenu ayudaScramble;
    private javax.swing.JMenuItem cargarArchivo;
    private javax.swing.JLabel elegir_cat;
    private javax.swing.JMenuItem guardar2x2;
    private javax.swing.JMenuItem guardar3x3;
    private javax.swing.JMenuItem guardar4x4;
    private javax.swing.JMenuItem guardarCargar2x2;
    private javax.swing.JMenuItem guardarCargar3x3;
    private javax.swing.JMenuItem guardarCargar4x4;
    private javax.swing.JLabel infor;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenu jMenu3;
    private javax.swing.JMenu jMenu4;
    private javax.swing.JMenu jMenu5;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel labelImagen;
    private javax.swing.JLabel labelScramble;
    private javax.swing.JMenuItem limpiarTodo;
    private javax.swing.JLabel logo;
    private javax.swing.JLabel manoder;
    private javax.swing.JLabel manoizq;
    private javax.swing.JLabel mejores10list;
    private javax.swing.JLabel mejores5list;
    private javax.swing.JPanel panel;
    private javax.swing.JPanel panel2x2;
    private javax.swing.JPanel panel3x3;
    private javax.swing.JPanel panel4x4;
    private javax.swing.JPanel panelGrafica;
    private javax.swing.JLabel titulo;
    private javax.swing.JMenuItem videoBasico;
    private javax.swing.JMenuItem videoFridrich;
    private javax.swing.JMenuItem videoFridrichRED;
    // End of variables declaration//GEN-END:variables
}