Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rub'n

#781
Foro Libre / un gran theft auto en España ?
18 Octubre 2018, 17:29 PM
Que saben de esto?  :huh: o sera wasofi@ , ciberChorrad@s etc ?

#782
Java / Re: Una ayudita
18 Octubre 2018, 16:54 PM

Hola,
La descripción de tu post no es adecuada "Una ayudita"  :-\ , y usa Código GeSHI




Este es tu código algo modificado para que funcione pero se hacia largo y aun faltaba comparar  :-(

Código (java) [Seleccionar]

import java.util.Scanner;

public class ProfeAdmin {

   public static void main(String[] args) {

       Scanner leer = new Scanner(System.in);
       String nom = new String("Docente2018");
       String contra = new String("Docente2018");
       String nom2 = new String("Administrador2018");
       String contra2 = new String("Administrador2018");
       System.out.println("1)Profesor");
       System.out.println("2)Administrador");
       int Opcion = leer.nextInt();


       int count = 1; // uso de contador para contrar la oportunidades que son 3

       switch (Opcion) {

           case 1:

               System.out.println("Ingrese su nombre de usuario: ");
               String nombre = leer.next();

               System.out.println("Ingrese su contraseña: ");
               String contraseña = leer.next();


               // establecer 3 oportunidades si se equivoca en el nombre o la contraseña

               if (nom.equals(nombre) && contra.equals(contraseña)) {
                   mostrar("Correcto access granted");

               } else {
                   if (!nom.equals(nombre)) { // se lee, "si nom no es igual a nombre" , dara true
                       System.out.println("Nombre incorrecto");
                       int countO = 3;
                       while (count <= 3) {
                           ShowData.showLn("Oportunidad " + (countO--));
                           ShowData.showLn("Ingrese Nombre");
                           final String newName = leer.next();

                           if (newName.equals(nom)) {
                               ShowData.showLn("Nombre Correcto");
                               break;
                           } else {
                               count++;
                               continue;
                           }

                       }
                       count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado
                                  // xq no entrara mas en el while

                   } else if (!contra.equals(contraseña)) { //si la contra no es igual a contraseña, dara true

                       System.out.println("Contraseña incorrecta");
                       int countO = 3;
                       while (count <= 3) {
                           mostrar("Oportunidad " + (countO--)); // decremento del count0 en 1
                           mostrar("Ingrese contraseña");
                           final String newPass = leer.next();

                           if (newPass.equals(contra)) {
                               mostrar("Contraseña correcta");

                               /*
                               Aqui introducir siguente menu
                                */

                               break;
                           } else {
                               count++;
                               continue;
                           }

                       }
                       count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado
                                   // xq no entrara mas en el while

                   }

               }

               break;

           case 2:
               System.out.println("Ingrese su nombre de usuario: ");
               String nombre2 = leer.next();
               System.out.println("Ingrese su contraseña: ");
               String contraseña2 = leer.next();


               if (nom2.equals(nombre2) && contra2.equals(contraseña2)) {
                   mostrar("Correcto access granted");
               } else {
                   if (!nom2.equals(nombre2)) { // se lee, "si nom no es igual a nombre" , dara true
                       System.out.println("Nombre incorrecto");
                       int countO = 3;
                       while (count <= 3) {
                           mostrar("Oportunidad " + (countO--));
                           mostrar("Ingrese Nombre");
                           final String newName = leer.next();

                           if (newName.equals(nom2)) {
                               mostrar("Nombre Correcto");
                               break;
                           } else {
                               count++;
                               continue;
                           }

                       }
                       count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado
                       // xq no entrara mas en el while

                   } else if (!contra2.equals(contraseña2)) { //se lee, la contra no es igual a contraseña, dara true

                       System.out.println("Contraseña incorrecta");
                       int countO = 3;
                       while (count <= 3) {
                           mostrar("Oportunidad " + (countO--)); // decremento del count0 en 1
                           mostrar("Ingrese contraseña");
                           final String newPass = leer.next();

                           if (newPass.equals(contra2)) {
                               mostrar("Contraseña correcta");

                               /*
                               Aqui introducir siguente menu
                                */

                               break;
                           } else {
                               count++;
                               continue;
                           }

                       }
                       count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado
                       // xq no entrara mas en el while

                   }

               }

               break;
       }
   }

   private static void mostrar(final String s) {
       System.out.println(s);
   }

   //establecer oportunidades, son 3, creamos un metodo
   private void filtrar() {

   }
}




tu código original carece de métodos, uso de contructor, de variables de instancia, variables de clase, es bueno que le des un vistazo y refactorises tu código con eso., y ahora con este codigo se nota algo de diferencia con respecto a la reducción de líneas, solo que usamos tipos enum aquí

para las sentencias switch puedes usar enum  >:D ver linea 50 el método
Código (java) [Seleccionar]
getUsersByID()



Código (java) [Seleccionar]
package foro;

import javax.swing.*;
import java.util.EnumSet;
import java.util.NoSuchElementException;
import java.util.Scanner;

enum Users {

   DOCENTE(1),
   ADMINISTRADOR(2);

   private Integer id;

   Users(final Integer id) {
       this.id = id;
   }
   public Integer getId() {
       return id;
   }

   //buscando los usarios
   public static Users getUsersByID(final Integer id) {
       return EnumSet.allOf(Users.class)
               .stream()
               .filter(object -> id.equals(object.id))
               .findFirst() //detienela busqueda de las lista con la primera conincidencia
               .get(); // retorna un NoSuchElementException en caso que no exista dicho id
   }

}


public class ProfeAdmin2 {

   private static final Scanner LEER = new Scanner(System.in);
   private static final String ACCESS_GRANTED = "Access Granted.";
   private static final String DATOS_INCORRECTOS = "Datos incorrectos.";

   private String nom = new String("Docente2018");
   private String contra = new String("Docente2018");
   private String nom2 = new String("Administrador2018");
   private String contra2 = new String("Administrador2018");

   public ProfeAdmin2() {
       System.out.println("1)Profesor");
       System.out.println("2)Administrador");
       final int opcion = LEER.nextInt();
       try {
           final Users users = Users.getUsersByID(opcion);
           switch (users) {
               case DOCENTE:
                   process(nom,contra); // pasando parametros correspondientes al metodo process para reutilizarlo
                   break;
               case ADMINISTRADOR:
                   process(nom2,contra2); // pasando parametros correspondientes al metodo process para reutilizarlo
                   break;
           }
       }catch (final NoSuchElementException ex) {
           JOptionPane.showMessageDialog(null,"No se encuentra el usuario " + opcion);
           mostrar("Saliendo de la aplicacion");
           System.exit(0);
       }

   }

   private void process(final String paramNom, final String paramPass) {
       System.out.println("Ingrese su nombre de usuario: ");
       final String nombre = LEER.next();

       System.out.println("Ingrese su contraseña: ");
       final String contraseña = LEER.next();

       // establecer 3 oportunidades si se equivoca en el nombre o la contraseña
       int count = 0;
       if (nombre.equals(paramNom) && contraseña.equals(paramPass)) {
           mostrar(ACCESS_GRANTED);
           /*
           Pasar a otro menu aqui
            */
       } else {

           if(!nombre.equals(paramNom) && !contraseña.equals(paramPass)) {
               mostrar(DATOS_INCORRECTOS);
               ingresarNombre("", paramNom);
               ingresarPass("", paramPass);
               mostrar(ACCESS_GRANTED);
           }

           else if (!nombre.equals(paramNom)) { // se lee, "si nom no es igual a paramNom" , dara true
               ingresarNombre("Nombre incorrecto",paramNom);
           } else if (!contraseña.equals(paramPass)) { //si la contra no es igual a paramPass, dara true
               ingresarPass("Contraseña incorrecta",paramPass);
           }
       }
   }

   private void ingresarNombre(final String msg,final String paramNom) {
       System.out.println(msg);
       int countO = 3;
       int count = 0;
       while (count <= 3) {
           mostrar("Oportunidad " + (countO--));
           mostrar("Ingrese Nombre");
           final String newName = LEER.next();
           if (newName.equals(paramNom)) {
               mostrar("Nombre Correcto");
               
               break;
           } else {
               count++;
               continue;
           }
       }
       count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado
       // xq no entrara mas en el while
   }
   private void ingresarPass(final String msg, final String paramPass) {
       System.out.println(msg);
       int countO = 3;
       int count = 0;
       while (count <= 3) {
           mostrar("Oportunidad " + (countO--)); // decremento del count0 en 1
           mostrar("Ingrese contraseña");
           final String newPass = LEER.next();
           if (newPass.equals(paramPass)) {
               mostrar("Contraseña correcta");
             
               break;
           } else {
               count++;
               continue;
           }
       }
       count = 0; // seteando el contador a cero, sin eso el comportamiento no sera el adecuado
       // xq no entrara mas en el while
   }

   private <T> void mostrar(final T s) {
       System.out.println(s);
   }
   public static void main(String ..._0x52) {
       new ProfeAdmin2();
   }

}


#783
Cita de: z3nth10n en 16 Octubre 2018, 09:14 AM
Hola, en ese caso, significa que tiene la bandeja de entrada llena??

Más en concreto, es por @OmarHack, que hace ya un siglo que no hablo con el... :P

Un saludo.

jajaaj aun recuerdo a Omar, por skype.
#784
Cita de: olimpico10 en  7 Octubre 2018, 17:36 PM
Buenas rub'n ,

estoy conociendo ahora Structs 2, y la verdad es que me está gustando como framework, Springframework no lo he trabajado aun.

En cuanto a tus indicaciones, muchas gracias, lo intentaré así. En cualquier caso, sabes como funciona exactamente Quartz internamente? Me refiero a como programa los trabajos. (Esto último es solo curiosidad  :laugh:)

Un saludo.

Pues desde luego que no, guíate por su API  ;D
#785
Hola, que tal, Structs 2  >:( porque no Springframework :D ? pero bueno que mas da

bueno mira, usa


https://mvnrepository.com/artifact/org.quartz-scheduler/quartz/2.3.0

Código (xml) [Seleccionar]
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
   <groupId>org.quartz-scheduler</groupId>
   <artifactId>quartz</artifactId>
   <version>2.3.0</version>
</dependency>


Código (xml) [Seleccionar]
<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
<dependency>
   <groupId>javax.mail</groupId>
   <artifactId>javax.mail-api</artifactId>
   <version>1.6.2</version>
</dependency>



Esto te ayuda a crear la expresion de cron http://www.cronmaker.com/



creas una clase que implente a Job, en ese metodo execute manda el mail

Código (java) [Seleccionar]
public class TimerClass implements Job {

   public TimerClass() {

   }

   @Override
   public void execute(JobExecutionContext jobExecutionContext) {
        //Logica del mail aqui
         try {
              System.out.println("Hola");
         }catch(JobExecutionException  ex) {
         }
       
   }
}


En tu clase que implementa el ServletContextListener dentro del método

Código (java) [Seleccionar]
public void contextInitialized(ServletContextEvent param){
new ExecTimer();
}


Código (java) [Seleccionar]
public class ExecTimer {

   private JobDetail job;
   private Trigger trigger;
   private Scheduler scheduler;

   private static final String TWENTY_SEC = "0/20 * * * * ?"; //cada 20 segundos

                                     //seg,min,hora,dia,mes,diaSemana,Año(Opcional)
                                             //todos los viernes a las 6:30AM
   private static final String FECHA_FUTURA = "00 30 6 ? * FRI";   // http://www.cronmaker.com/


   public ExecTimer() {
       initTask();
   }

   private void initTask() {
       try {
           job = JobBuilder.newJob(TimerClass.class)
                   .withIdentity("EnviarMail")
                   .build();
           trigger = TriggerBuilder
                   .newTrigger()
                   .withSchedule(CronScheduleBuilder.cronSchedule(FECHA_FUTURA))
                   .build();
           scheduler = new StdSchedulerFactory().getScheduler();
           scheduler.start();
           scheduler.scheduleJob(job, trigger);
       } catch (SchedulerException e) {
           e.printStackTrace();
       }
   }
}


Con Springboot seria mas facil aun, menos codigo y sin .xml  >:D

Código (java) [Seleccionar]
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableScheduling
@SpringBootApplication
public class Application {

   public static void main(String ...blabla) {
       SpringApplication.run(Application.class);
   }

}



Código (java) [Seleccionar]
 
@Scheduled(cron= "00 30 6 ? * FRI")
public void enviarMail() {
   System.out.println("Hola, ");
}


Y otra cosa importante la operación de envío del mail puedes ejecutarla de manera asíncrona, hay mucha maneras de hacerlo con java, hará que tu aplicación no se bloquee, mas reactiva  :D
#786
Java / Re: Llamar objetos desde un switch
5 Octubre 2018, 01:38 AM
Cita de: 3n31ch en  5 Octubre 2018, 01:27 AM
Conste que yo conteste primero, así que te quedas eternamente agradecido de mi, no del usurpador de respuestas "rub'n".. (dicen que el mastica con la boca abierta).

PD: rub'n, uno que se esfuerza por no ponerle el código completo y no hacerle la tarea... y tu llegas y lo arregas, hahahaha

Ni te creeas que quiero discutir  :xD
#787
Java / Re: Llamar objetos desde un switch
5 Octubre 2018, 01:17 AM
tal cual como te dice 3n31ch , añadiendo tambien que uses modificadores de acceso como private por convencion también de esta manera puedes hacerlo


Código (java) [Seleccionar]

package foro;

import java.util.Scanner;

public class TestDelObligatorioV2 {

   private Scanner dato;
   private int num, list;
   private int datos[];
   private String nombre[] = new String[0];
   private String apellido[] = new String[0];
   private String telefono[] = new String[0];

   public TestDelObligatorioV2() {

   }

   public void iniciar() {
       int n;
       dato = new Scanner(System.in);
       System.out.println("Bienvenido!...");
       System.out.println("1- Ingreso de datos");
       System.out.println("2- Listado de datos");
       System.out.println("3- Buscar por nombre");
       System.out.println("4- Buscar por telefono");

       do {
           System.out.print("Opcion: ");
           n = dato.nextInt();
           switch (n) {
               case 1:
                   //Aca quiero llamar a op1
                   op1();
                   break;
               case 2 :
                   op2();
                   break;
           }


       } while (n != 0 && n < 5);


   } //Aca se van a cargar los datos y crear los vectores


   public void op1() {
       System.out.print("Cuantos datos se ingresaran? ");
       num = dato.nextInt();
       datos = new int[num];
       nombre = new String[num];
       apellido = new String[num];
       telefono = new String[num];
       dato.nextLine();
       for (int i = 0; i < num; i++) {
           System.out.print("Ingrese nombre: ");
           nombre[i] = dato.nextLine();
           System.out.print("Ingrese apellido: ");
           apellido[i] = dato.nextLine();
           System.out.print("Ingrese telefono: ");
           telefono[i] = dato.nextLine();
       }
   } //Aca se van a mostrar los datos de los vectores

   public void op2() {
       System.out.println("Cuantos datos quiere ver? ");
       list = dato.nextInt();
       System.out.println("Listado de datos:");
       System.out.println("--------------------------");
       for (int i = 0; i < list; i++) {
           System.out.println(apellido[i] + " " + nombre[i] + " - " + telefono[i]);

       }
   }

   public static void main(String[] args) {
       TestDelObligatorioV2 prueba = new TestDelObligatorioV2();
       prueba.iniciar();
       prueba.op1();
       prueba.op2();
   }

}


El metodo op2() usa el array que previamente has llenado linea 7 puedes ver la diferencia, con ese accedes a cada index de tu array
Código (java) [Seleccionar]
public void op2() {
       System.out.println("Cuantos datos quiere ver? ");
       list = dato.nextInt();
       System.out.println("Listado de datos:");
       System.out.println("--------------------------");
       for (int i = 0; i < list; i++) {
           System.out.println(apellido[i] + " " + nombre[i] + " - " + telefono[i]);
       }
   }
#788
Hola,

esto te puede servir



Creamos una constante tipo String para el PreparedStatement nuestra sentencia precompilada

Código (java) [Seleccionar]
private static final String UPDATE = "UPDATE customer SET first_name=?, last_name=? WHERE id=?";

Añadimos una columna que contendrá nuestro botón

Código (java) [Seleccionar]
defaultTableModel.addColumn("Update item");

Obtenemos el nombre de la columna y le seteamos los 2 objetos de las clases que permitiran el update
Código (java) [Seleccionar]
jTable.getColumn("Update item").setCellEditor(new UpdateItem());
jTable.getColumn("Update item").setCellRenderer(new BotonRenderizado());


Añadimos un mouseListener a la tabla para setear los valores en el form con el click , tu debes hacer el ajuste con tu código
Código (java) [Seleccionar]
 jTable.addMouseListener(new MouseAdapter() {
           @Override
           public void mouseClicked(MouseEvent e) {
               int seletedRow = jTable.getSelectedRow();
               DefaultTableModel defaultTableModel = (DefaultTableModel) jTable.getModel();
               jTextFieldID.setText(defaultTableModel.getValueAt(seletedRow, 0).toString());
               jTextFirsName.setText(defaultTableModel.getValueAt(seletedRow, 1).toString());
               jTextLastName.setText(defaultTableModel.getValueAt(seletedRow, 2).toString());
           }
       });



Creamos una clase que extiende de JButton

Código (java) [Seleccionar]
public class BotonRenderizado extends JButton implements TableCellRenderer {

    @Override
   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
       if (value != null) {
           setText("");
       } else {
           setText("update");
       }
       if (isSelected) {
           setForeground(table.getSelectionForeground());
           setBackground(table.getSelectionBackground());
       } else {
           setForeground(table.getForeground());
           setBackground(UIManager.getColor("Button.background"));
       }
       return this;
   }
}


Aquí es donde esta la verdadera lógica del botón en la tabla desde la linea 21 a 38 es un ejemplo que te pongo, tu debes de programarlo acorde a tu código

en la linea 33 puedes usar también DbUtils para ahorrarte mas lineas de código, sirve para refrescar la tabla

Código (java) [Seleccionar]
private class UpdateItem extends AbstractCellEditor implements TableCellEditor {

       private JButton editor = new JButton();
       private Object value;
       private int fila;
       private JTable table;

       public UpdateItem() {

           updateItem();

       }

       private void updateItem() {
           editor.addActionListener(e -> {
               if (table != null) {
                   fireEditingStopped();
                   TableModel model = table.getModel();
                   if (model instanceof DefaultTableModel) {
                       try {
                           int getrow = table.getSelectedRow();
                           final Long id = Long.valueOf(jTextFieldID.getText());
                           final String firstName = jTextFirsName.getText();
                           final String lastName = jTextLastName.getText();


                           final PreparedStatement ps = connection.prepareStatement(UPDATE);
                           ps.setString(1, firstName);
                           ps.setString(2, lastName);
                           ps.setLong(3, id);
                           ps.executeUpdate();

                           //DbUtils
                           model.setValueAt(id, getrow, 0);
                           model.setValueAt(firstName, getrow, 1);
                           model.setValueAt(lastName, getrow, 2);

                           JOptionPane.showMessageDialog(null, "Updated");

                       } catch (SQLException ex) {
                           ex.printStackTrace();
                       }
                   }
               }
           });
       }

       @Override
       public boolean isCellEditable(EventObject e) {
           return true;
       }

       @Override
       public Object getCellEditorValue() {
           return value;
       }

       @Override
       public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
           this.table = table;
           this.fila = row;
           this.value = value;
           if (value != null) {
               editor.setText("");
           } else {
               editor.setText("update");
           }
           if (isSelected) {
               editor.setForeground(table.getSelectionForeground());
               editor.setBackground(table.getSelectionBackground());
           } else {
               editor.setForeground(table.getForeground());
               editor.setBackground(UIManager.getColor("Button.background"));
           }
           return editor;
       }
   }



Código (java) [Seleccionar]
package foro;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableModel;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.*;
import java.util.EventObject;

public class ConnectJDBCTest extends JFrame {

   private static final String URL = "jdbc:mysql://localhost:3306/demo?useSSL=false";
   private static final String USERNAME = "root";  //mala practica
   private static final String PASSWORD = "password"; // mala practica

   private static final String SELECT = "SELECT id, first_name, last_name FROM customer";
   private static final String UPDATE = "UPDATE customer SET first_name=?, last_name=? WHERE id=?";
   private static final String DELETE = "DELETE FROM customer where id = ";

   private DefaultTableModel defaultTableModel = new DefaultTableModel();
   private JTable jTable = new JTable(defaultTableModel);
   private JScrollPane jScrollPane = new JScrollPane(jTable);
   private Long id;
   private String firstName;
   private String lastName;

   private JTextField jTextFieldID = new JTextField(10);
   private JTextField jTextFirsName = new JTextField(10);
   private JTextField jTextLastName = new JTextField(10);

   private static Connection connection = null;

   public ConnectJDBCTest() {
       initLayout();
       initConnection();
   }

   private void initLayout() {

       defaultTableModel.addColumn("Id");
       defaultTableModel.addColumn("First Name");
       defaultTableModel.addColumn("Last Name");
       defaultTableModel.addColumn("Update item");


       jTable.addMouseListener(new MouseAdapter() {
           @Override
           public void mouseClicked(MouseEvent e) {
               int seletedRow = jTable.getSelectedRow();
               DefaultTableModel defaultTableModel = (DefaultTableModel) jTable.getModel();
               jTextFieldID.setText(defaultTableModel.getValueAt(seletedRow, 0).toString());
               jTextFirsName.setText(defaultTableModel.getValueAt(seletedRow, 1).toString());
               jTextLastName.setText(defaultTableModel.getValueAt(seletedRow, 2).toString());
           }
       });

       jTable.getColumn("Update item").setCellEditor(new UpdateItem());
       jTable.getColumn("Update item").setCellRenderer(new BotonRenderizado());

       final JPanel jPanel = new JPanel();
       jPanel.setLayout(new BorderLayout());
       jPanel.add(jScrollPane, BorderLayout.NORTH);

       final JPanel jPanelSur = new JPanel();
       jPanelSur.add(new JLabel("ID"));
       jPanelSur.add(jTextFieldID);
       jPanelSur.add(new JLabel("First Name"));
       jPanelSur.add(jTextFirsName);
       jPanelSur.add(new JLabel("Last Name"));
       jPanelSur.add(jTextLastName);

       jPanel.add(jPanelSur, BorderLayout.SOUTH);

       add(jPanel);

       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setLocationRelativeTo(null);
       pack();
       setVisible(true);
   }

   private void initConnection() {
       try {
           connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
           final Statement statement = connection.createStatement();
           final ResultSet resultSet = statement.executeQuery(SELECT);
           while (resultSet.next()) {
               id = resultSet.getLong("id");
               firstName = resultSet.getString("first_name");
               lastName = resultSet.getString("last_name");
               defaultTableModel.addRow(new Object[]{id, firstName, lastName});
           }
       } catch (SQLException e) {
           e.printStackTrace();
       }
   }

   private class UpdateItem extends AbstractCellEditor implements TableCellEditor {

       private JButton editor = new JButton();
       private Object value;
       private int fila;
       private JTable table;

       public UpdateItem() {

           updateItem();

       }

       private void updateItem() {
           editor.addActionListener(e -> {
               if (table != null) {
                   fireEditingStopped();
                   TableModel model = table.getModel();
                   if (model instanceof DefaultTableModel) {
                       try {
                           int getrow = table.getSelectedRow();
                           final Long id = Long.valueOf(jTextFieldID.getText());
                           final String firstName = jTextFirsName.getText();
                           final String lastName = jTextLastName.getText();


                           final PreparedStatement ps = connection.prepareStatement(UPDATE);
                           ps.setString(1, firstName);
                           ps.setString(2, lastName);
                           ps.setLong(3, id);
                           ps.executeUpdate();

                           //DbUtils
                           model.setValueAt(id, getrow, 0);
                           model.setValueAt(firstName, getrow, 1);
                           model.setValueAt(lastName, getrow, 2);

                           JOptionPane.showMessageDialog(null, "Updated");

                       } catch (SQLException ex) {
                           ex.printStackTrace();
                       }
                   }
               }
           });
       }

       @Override
       public boolean isCellEditable(EventObject e) {
           return true;
       }

       @Override
       public Object getCellEditorValue() {
           return value;
       }

       @Override
       public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
           this.table = table;
           this.fila = row;
           this.value = value;
           if (value != null) {
               editor.setText("");
           } else {
               editor.setText("update");
           }
           if (isSelected) {
               editor.setForeground(table.getSelectionForeground());
               editor.setBackground(table.getSelectionBackground());
           } else {
               editor.setForeground(table.getForeground());
               editor.setBackground(UIManager.getColor("Button.background"));
           }
           return editor;
       }
   }

   public static void main(String... blabla) {
       final String osType = System.getProperty("os.name");
       try {
           if (osType.contains("Win")) {
               UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
           } else if (osType.contains("Linux")) {
               UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
           }
       } catch (Exception ex) {
           //do nothing
       }
       new Thread(() -> {
           new ConnectJDBCTest();
       }).start();
   }
}


Selecciona primero un item, editalo , luego actualiza

#789
Java / Re: Juego Piedra-Papel-Tijera
3 Octubre 2018, 01:52 AM
El problema  esta aqui en el e.getActionCommnad() siempre viene "" por lo tanto no entra en el switch de la linea 304

Entonces con lo siguiente sabemos que botón se ha clickeado, y si sabemos que botón ha sido clikeado, podemos aplicar bien el click   :xD

Código (java) [Seleccionar]
String rating = rate(e.getActionCommand(), comAction);

Código (java) [Seleccionar]
   private ActionListener buttonListener = e -> {
       // Generate a random action
       int random = ThreadLocalRandom.current().nextInt(0, 3);
       String comAction = actions[random];

       // Rate the current situation
       String rating;

       if(e.getSource() == bTijeras) {
         
           rating = rate("Tijeras", comAction);
       }else if(e.getSource() == bPapel) {
           
           rating = rate("Papel", comAction);
       }else {
         
           rating = rate("Piedra", comAction);
       }

       
       // Show a result alert
       JOptionPane.showMessageDialog(null , rating ,"Resultado" , 1);
   };
#790
Hola,

no veo el log por lo visto es NPE nullPointerException

claro private static Set<String> correctas; a punta a null instancia la variable de clase, "clase" porque la tienes con static


Código (java) [Seleccionar]
private static Set<String> correctas = new HashSet<>(); // usa operador diamante <> de generics




Código (java) [Seleccionar]
public String generaPalabra(int Facil)
{
int n;
n= (int)(Math.random()*4);
if(Facil==0)
return Normal[n];

else
return Dificil[n];

}


siempre dará falso porque se compara 1==0 que es falso retornando un valor random del array Difícil creo que mejor es así,

Código (java) [Seleccionar]
public String generaPalabra(final int facil) {
       if (facil == 1) {
           return Types.FACIL[SR.nextInt(Types.FACIL.length - 1)];
       } else if (facil == 2) {
           return Types.NORMAL[SR.nextInt(Types.NORMAL.length - 1)];
       }
       return Types.DIFICIL[SR.nextInt(Types.DIFICIL.length - 1)];
}





donde
Código (java) [Seleccionar]
SR.nextInt() para generar un numero aleatorio contenido en el largo del array fácil , y menos 1 para evitar

Código (java) [Seleccionar]
java.lang.ArrayIndexOutOfBoundsException

facil tiene 17 elementos, si cae 18 daría error xq el array no es de ese tamaño pero con -1 nunca caera 18 XD

Código (java) [Seleccionar]
java.lang.ArrayIndexOutOfBoundsException: 18

método checarLetra creo que debería comparar aquí pero con la palabra que se genera de manera aleatoria con el método generaPalabra que la retorna

Código (java) [Seleccionar]
palabraGenerada = Operacion.generaPalabra(1);  // ver linea 90

si la palabra aleatoria es tela si se introduce X debería retornar false, porque x no esta en la palabra "tela"

Código (java) [Seleccionar]
public boolean checarLetra(char letra, String palabra) {
       boolean mensaje = false;
       for (int i = 0; i < palabra.length(); i++) {
           if (letra == palabra.charAt(i)) {
               mensaje = true;
               break;
           }
       }
       return mensaje;
}


xq si lo dejas como lo tienes siempre dará true ya que compará siempre el carácter introducido con la palabra que tecleas




Aquí como parámetro dices palabra e introduces una letra ? XD o quizás dices, que cada letra correcta sea añadida al Set ?

Código (java) [Seleccionar]
public Set letrasPalabra(String palabra)
{
Set letras = new HashSet();
for (int i=0;i<palabra.length() ;i++)
{
if(palabra.charAt(i) != ' ')
{
letras.add(palabra.charAt(i));
}
}
return letras;
}


Que deseas que haga actualizaVisible me imagino que si la letra introducida esta contenida en la palabra generada, que se reemplace el asterisco por la letra algo así  ?





Código (java) [Seleccionar]

package adivinapalabras;

public final class Types {

   public static final String FACIL[] = {"reir", "hola", "jugo", "papa", "pala", "pasa",
           "para", "alma", "nada", "casa", "mama", "tele",
           "mira", "tela", "bala", "cera", "tira"};

   public static final String NORMAL[] = {"apretado", "avestruz", "ceramica",
           "estimulo", "amarillo", "eleccion", "estrecho",
           "invierno", "chatarra", "estrella"};

   public  static final String DIFICIL[] = {"indiscutible", "participante", "personalismo",
           "perturbacion", "contundencia", "supervisamos", "buscapleitos",
           "vinculandose"};
}




Código (java) [Seleccionar]

package adivinapalabras;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.security.SecureRandom;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;

public class AdivinarPalabras {

   public static BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
   private static Set<String> correctas = new HashSet<>();
   private static final SecureRandom SR = new SecureRandom();

   private static String palabraGenerada = "";


   public String generaPalabra(final int facil) {
       //int n = (int) (Math.random() * 4); no hace falta
       if (facil == 1) {
           return Types.FACIL[SR.nextInt(Types.FACIL.length - 1)];
       } else if (facil == 2) {
           return Types.NORMAL[SR.nextInt(Types.NORMAL.length - 1)];
       }
       return Types.DIFICIL[SR.nextInt(Types.DIFICIL.length - 1)];
   }

   public boolean checarLetra(char letra, String palabra) {
       boolean mensaje = false;
       for (int i = 0; i < palabra.length(); i++) {
           if (letra == palabra.charAt(i)) {
               mensaje = true;
               break;
           }
       }
       return mensaje;
   }


   public Set<String> letrasPalabra(String palabra) {
       //Set letras = new HashSet(); no hace falta
       for (int i = 0; i < palabra.length(); i++) {
           if (palabra.charAt(i) != ' ') {
               correctas.add(String.valueOf(palabra.charAt(i)));
           }
       }
       return correctas;
   }

   public String actualizaVisible(Set<String> correctas, String palabra, String visible) {
       visible = "";
       boolean bandera = false;
       Iterator it = correctas.iterator();
       for (int i = 0; i < palabra.length(); i++) {
           while (it.hasNext()) {
               char a = it.next().toString().charAt(0);
               System.out.println("palabra " + a + " " + palabra.trim().charAt(i));
               if (a == palabra.trim().charAt(i)) {
                   visible += a;
                   bandera = true;
                   break;
               }
           }
           if (bandera == false) {
               visible += "_";
           }
           bandera = false;
           it = correctas.iterator();
       }
       return visible;
   }


   public static void main(String[] args) throws Exception {

       System.out.println("Establezca el nivel de dificultad: ");
       System.out.println("Facil(f)");
       System.out.println("Normal(n)");
       System.out.println("Dificil(d)");
       String dificultad = entrada.readLine();


       switch (dificultad) {
           case "f":
               AdivinarPalabras Operacion = new AdivinarPalabras();
               try {

                   palabraGenerada = Operacion.generaPalabra(1);
                   System.out.println("Palabra generada: ****" + palabraGenerada);
                   System.out.println("teclea una letra de la palabra");
                   String letra = entrada.readLine();
                   char l = letra.charAt(0);

                   Operacion.checarLetra(l, palabraGenerada);
                    Operacion.letrasPalabra(palabraGenerada);
                   Operacion.actualizaVisible(correctas, letra, letra);

               } catch (Exception ex) {
                   ex.printStackTrace(); // usado para ver la pila de error generada
                   System.out.println("No introdujo una letra valida " + ex.getMessage());
               }
           case "n":
       }
   }

}