elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 ... 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 [66] 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ... 140
651  Programación / Java / Re: pequeñas dudas de java en: 4 Abril 2019, 10:58 am
Hola chicos, como puedo aprender mas rapido Java? que quiere decir cuando creo un metodo dentro de una clase principal como public static void me lo toma cuando lo llamo desde el main de esa clase pero cuando lo declaro como public void no me lo toma?


Leete un buen libro como deitel, saber buscar en Google,aprende bien lo básico pero bien.

Aquí coloque varios libros en Manuela de Java de Java

Y con respecto a los métodos estaticos y de objetos pues, es que ambos funcionan distinto. en el main puedes invocar a métodos estaticos, y los metodos no estaticos por medio de una Objeto creado que pueda invocar a su método correspondiente.

Y eso se da porque el metodo main es estatico en si.

Cosa distinta en un contructor, que puedes invocar sin mucho problema, muchos frameworks no tienen como entrypoint a el metodo main, sino que usan otros, y tambien contructores  ;D
652  Programación / Java / Re: Juego de la vida - Simulacion en Java en: 1 Abril 2019, 01:10 am
Puedes hacerlo de modo procedimental o con clases, a tu gusto...

Si lo haces con clases, por ejemplo crearía una clase 'tablero', en el constructor se recibe las filas y columnas (o cantidad) si ambos valores serán iguales.
También un parámetro para indicar cuandos e considera el mundo muerto, es decir si hay 25x25 casillas (625 células, podría consdierarse muerto (por ejemplo), si quedna menos de 50), un valor de cero o menor, podría indicar que vive mientras queden células vivas...
Acto seguido se crea un array bidimensional de  NxM casillas...
Código:
int Filas, Columnas, MundoMuere

funcion New(int F, int C, int MM)
    filas = f
    columnas = C
    Si (MM < 0) luego MM=0)
    MundoMuere = MM

    dimensionar Mapa(filas, columnas)
fin funcion
ó:
Código:
funcion New(int Casillas)



Una enumeración de 2-3 estados. Celula viva = '*' , célula muerta = ' ', celula 'enferma' = '-' (caso de que quisieras complicarlo y que una célula necesitara x estados (por ejemplo 1, y al siguiente muere) seguidos de transición por debajo del umbral de vida). es decir si no tiene los vecinos esperados y está viva, enferma, pero si está enferma muere.
Código:
enumeración EstadoCelula
   ESTADO_VIVA = 0
   ESTADO_ENFERMA = 1  ' de 1 a 8, podría alojar 8 transiciones antes de morir, o pasar directamente del 1 al 9, o del 0 al 9
   ESTADO_MUERTA = 9
FIN ENUMERACION

Un array con los valores a dibujar (char/string)
Código:
char  representa(0 a 9)
// con estos valores
    representa(0) = "*"  // viva
    representa(1) = "-"  //enferma
    // representa(2) = "-"
    //...  si se prefieriese dibujar estados de enfermedad diferentes o todos con '1'
    representa(9) = " " //muerta
 // tambén se puede hacer otro array con colores, para dibujar de diferente color vivas de 'enfermas'.

Otra enumeración de los valores de transicion:
(Tu pon los valores que quieras, de hecho es bueno modificarlos, para ver como se comporta).
Código:
enumeracion Transicion
    TR_MUERE_INANICION = 1 // con 3 o menos células muere.
    // TR_VIVE = 2,3,4,5,6  / se entiende que viven con el rango dentro de ambos extremos.
    TR_MUERE_SOBREPOBLACION = 7
fin enumeracion

Una estructura retiene el estadO (de esos valores enumerados) y el recuento de vecinos.
Código:
Estructura DatosDeCelula
    EstadoCelula Estado
    Transicion NumVecinos
fin estructura

Array de DatosDeCelula Mapa()


Una función se encarga de contar los vecinos, para cada célula:
Código:
Funcion ContarVecinos() 
    int i, j, k, n

    bucle para j desde 0  a filas-1
        bucle para k desde 0 a Columnas -1
            Mapa(j,k).Vecinos = ContarMisVecinos(j,k)
        siguiente
    siguiente
fin funcion

// contar los vecinos para esta célula...
Transicion = funcion ContarMisVecinos(int fila, int Columna)  
    int x, y, w, h
    int j, k
    Transicion vecinos

    Si (fila <2)    // tiene 1 o 0 vecinos a la izquierda
         x = 0
         w = fila + 2
    Si (fila > filas-3)  // tiene 1 ó 0 vecinos a la derecha
         x= fila - 2
         w = filas -1
    sino
         x= fila - 2
         w = fila + 2
    fin si

    Si (columna <2)    // tiene 1 o 0 vecinos arriba
         y = 0
         h = columna + 2
    Si (columna > Columnas-3)  // tiene 1 ó 0 vecinos abajo
         y = columna - 2
         h = columnas -1
    sino
         y = columna - 2
         h = columna + 2
    fin si

    bucle para j desde y hasta h
        bucle para k desde x hasta w
            Si (mapa(j,k).estado = ESTADO_VIVA ) luego  vecinos +=1
        siguiente
    siguiente

    devolver vecinos
fin funcion

Luego otra función que actualice el estado en base a sus vecinos:
Código:
funcion UpdateMapa
    int j, k, vivas

    bucle para j desde 0 a filas -1
        bucle para k desde 0 hasta columnas -1
            si (Mapa(j,k).vecinos <= TR_MUERE_INANICION)
            o si (Mapa(j,k).vecinos <= TR_MUERE_SOBREPOBLACION)  // es una sola línea con la anterior, queda cortada en 2 por ser larga...
                mapa(j,k).estado = ESTADO_MUERTA
            si no  // hay que señalarla viva, porque antes podría estar muerta
                mapa(j,k).estado = ESTADO_VIVA
                vivas +=1
            fin si

            // char que representa el estado, fila, columna, color
            Dibujar(representa(mapa(j,k).estado ) ,j, k , color)
        siguiente
    siguiente

    Si (vivas <= MundoMuere) luego
        finpartida // no quedan células suficientes...
    fin si
fin funcion

Y una función dibujar para dibujar cada casilla (si no es muy complejo lo que deba hacer, puede subsumirse en la función anterior... (en 'dibujar...').

Básicamente eso es lo principal, generar las células al azar al comienzo de la partida, y algún otro detalle resulta ya nimio...

p.d.: Se me olvidada... al contar los vecinos, debe descontarse 1, si la célula en cuestión esta 'viva' (ella no debe contarse como su vecina). Es más fácil el doble bucle sin considerarla y luego descontarla que filtrarlo en el propio bucle (pués sucede 1 de las hasta 9 veces por cada casilla).

Interesante respuesta doc, vere si tengo un tiempo para mudarlo a Java  >:D
653  Programación / Java / Re: Suma de dos matrices - Me devuelve "[[D@7d4991ad" en: 1 Abril 2019, 00:30 am
Casi casi lo tiene dog  :xD, recorrer con doble ciclo for como haces con el método suma, porque debes recorrer cada indice, me da aburrimiento máximo llenarla, pero aleatoria nom y así ahorras tiempo en desarrollo, no apto para produccion  :xD

Pero me imagino que entiendes no? ejemplo las coordenada [0,0] de la matris1 se sumara con la [0,0] de la matris 2 y asi

Código
  1. public class Bidimensional {
  2.  
  3. private double[][] matriz;
  4. private int renglones;
  5. private int columnas;
  6. private static final SecureRandom SR = new SecureRandom();
  7. private static final DecimalFormat TWO_DIGITS = new DecimalFormat("#.##");
  8.  
  9. public Bidimensional(int renglones, int columnas) { // constructor y pido el ingreso de valores a matrices
  10. Scanner entrada = new Scanner(System.in);
  11. this.matriz = new double [renglones][columnas];
  12.  
  13. for(int i=0 ; i<renglones; i++)
  14. {
  15. for(int j=0; j<columnas; j++) {
  16. matriz[i][j]= Double.valueOf(TWO_DIGITS.format(1 + SR.nextDouble()));
  17. System.out.print("Ingresar el numero de matriz ["+i+":"+j+"]: ");
  18. System.out.println(matriz[i][j]);
  19.  
  20. }
  21. }
  22. }
  23.  
  24. public double[][] suma(Bidimensional m2) // operacion de suma
  25. {
  26. for(int i=0; i<2; i++) {
  27. for(int j=0; j<2; j++)
  28. {
  29. matriz[i][j]= matriz[i][j] + m2.matriz[i][j];
  30. }
  31. }
  32.  
  33. return matriz;
  34. }
  35.  
  36.        public double format(final double num) {
  37.            return Double.valueOf(TWO_DIGITS.format(num).replace(",", "."));
  38.        }
  39.  
  40. public static void main(String ...blalba) {
  41.  
  42. final Bidimensional matris = new Bidimensional(2,2);
  43. final Bidimensional matris2 = new Bidimensional(2,2);
  44.  
  45. final double[][] resultado = matris.suma(matris2);
  46. //Recorrer el Array de doble dimension, con java 8, java 7 usa doble for
  47. Arrays.stream(resultado)
  48. .flatMapToDouble(Arrays::stream)
  49.                                .map(this::format)
  50. .forEach(System.out::println);
  51.  
  52. }
  53. }

Código
  1. Ingresar el numero de matriz [0:0]: 1.32
  2. Ingresar el numero de matriz [0:1]: 1.8
  3. Ingresar el numero de matriz [1:0]: 1.62
  4. Ingresar el numero de matriz [1:1]: 1.71
  5. Ingresar el numero de matriz [0:0]: 1.53
  6. Ingresar el numero de matriz [0:1]: 1.6
  7. Ingresar el numero de matriz [1:0]: 1.6
  8. Ingresar el numero de matriz [1:1]: 1.57
  9. 2.85
  10. 3.4
  11. 3.22
  12. 3.28
  13.  
  14. Process finished with exit code 0

Tambien te sirve asi, y cualquier otra manera que funcione XD

Código
  1. public double[][] suma(Bidimensional m2) // operacion de suma
  2. {
  3. for(int i=0; i<matriz.length; i++) {
  4. for(int j=0; j<m2.matriz[i].length; j++)
  5. {
  6. matriz[i][j]= matriz[i][j] + m2.matriz[i][j];
  7. }
  8. }
  9.    return matriz;
  10. }

Y asi


Código
  1. for(int i=0; i<matriz.length; i++) {
  2.  for(int j=0; j<matriz[i].length; j++) {
  3. matriz[i][j]= matriz[i][j] + m2.matriz[i][j];
  4.  }
  5. }
654  Programación / Java / Re: Metodo mostrar todos los atributos de un objeto por pantalla(RESUELTO) en: 30 Marzo 2019, 18:37 pm
No deberias gastar tiempo en escribir los getters / setters o el metodo toString(). Los editores deberian hacerlo por ti. IntelliJ lo hace, al menos.

Otra alternativa es ni siquiera escribir el codigo, sino anotar la clase y que magicamente esos metodos se escriban y existan aunque no los veas. AutoValue y Lombok son 2 exponentes de esto.

Magicamente? o gracias a Reflection vía anotaciones? generando codigo en runtime, la chavala esta aprendiendo, por eso mi ejemplo.

Aunque me falto decirle eso. yo genere getters/setters/toString() con intelliJIDea, eclipse también lo hace, netBeans me imagino que también debería.

@CalgaryCorpus seria bueno que le pusieras un ejemplo de Project Lombok para que la ayudes.

Y de paso ah dia de hoy grandes Frameworks webs de java, potentes, tienen su implementacion de toString() sin api de terceros como lombok entre otras, de paso que toString() sirve para no mostrar el codigo hash directamente a alguien que espie dichos objetos.
 


@Beginner Web , creas las variables de instancia que quieras, luego, teclas Alt + insertar, debería aparecerte este cuadro de contexto con las opciones que se muestran, no aparece toString() porque ya lo use, versión de NetBeans que tengo

    * Product Version: NetBeans IDE 8.2 (Build 201610071157)



655  Programación / Java / Re: Metodo mostrar todos los atributos de un objeto por pantalla(RESUELTO) en: 30 Marzo 2019, 14:50 pm
//Este es una clase
public class Persona{
private String nombre;
private int edad;

Constructor va aquí
Getters & Setters aquí
}

//Este es el main
public class Personal{

public static void main(){
Persona objeto1=new Persona("Ana",14);

//Esto es algo tedioso de hacer varios objetos de distintas clases
//Podia crear un metodo en la clase Persona que muestre todo, pero quiero saber si hay otra técnica por defecto
sout para mostrar el nombre de objeto1;
sout para mostrar la edad de objeto1;

}

}


Me parece que me conviene crear metodos en las clases para pedir los datos y otro para mostrarlos asi escribo menos en el main


Que tal chavalina? Usa Geshi



Si hay mejores maneras de hacerlo por ejemplo una, lo que necesitas es algo de herencia simple

Código
  1. import java.util.logging.Logger;
  2.  
  3. /**
  4.  *
  5.  */
  6. @FunctionalInterface
  7. public interface IPersonal {
  8.  
  9.    Logger LOGGER =Logger.getLogger(IPersonal.class.getSimpleName());
  10.  
  11.    void introducirDatos();
  12.  
  13.    default <T> void mostrar(final T value) {
  14.        System.out.println(value);
  15.    }
  16.  
  17.    /**
  18.      * usar dentro de un metodo estatico
  19.      * @param value
  20.      * @param <T>
  21.      */
  22.    static <T> void mostrar2(final T value) {
  23.        System.out.println(value);
  24.    }
  25.  
  26.    default <T> void log(final T t) {
  27.        LOGGER.severe(t.toString());
  28.    }
  29.  
  30.    /**
  31.      * usar dentro de un metodo estatico
  32.      * @param t
  33.      * @param <T>
  34.      */
  35.    static <T> void log2(final T t) {
  36.        LOGGER.severe(t.toString());
  37.    }
  38. }
  39.  

Código
  1. import java.util.Objects;
  2. import java.util.Scanner;
  3.  
  4. /**
  5.  *
  6.  */
  7. public abstract class AbstractBasePersona implements IPersonal {
  8.  
  9.    protected String nombre;
  10.    protected int edad;
  11.    protected static final Scanner LEER = new Scanner(System.in);
  12.  
  13.    public AbstractBasePersona() {
  14.        this.edad = 0;
  15.        this.nombre = "";
  16.    }
  17.  
  18.    public AbstractBasePersona(final String nombre, final int edad) {
  19.        this.nombre = Objects.requireNonNull(nombre,"Nombre no debe ser null");
  20.        this.edad = Objects.requireNonNull(edad,"Edad no debe ser null");
  21.    }
  22.  
  23.    public String getNombre() {
  24.        return nombre;
  25.    }
  26.  
  27.    public void setNombre(String nombre) {
  28.        this.nombre = nombre;
  29.    }
  30.  
  31.    public int getEdad() {
  32.        return edad;
  33.    }
  34.  
  35.    public void setEdad(int edad) {
  36.        this.edad = edad;
  37.    }
  38.  
  39.    @Override
  40.    public void introducirDatos() {
  41.        mostrar("Introduce nombre: ");
  42.        nombre = LEER.next();
  43.        //bug scanner
  44.        LEER.nextLine();
  45.        mostrar("Introduce edad");
  46.  
  47.        while(!LEER.hasNextInt()) {
  48.            LEER.next();
  49.            mostrar("Valor invalido!, solo numeros");
  50.        }
  51.        edad = LEER.nextInt();
  52.  
  53.    }
  54.  
  55.    @Override
  56.    public String toString() {
  57.        final StringBuilder sb = new StringBuilder("\nPersona");
  58.        sb.append("\nNombre: ").append(nombre).append("\n");
  59.        sb.append("Edad: ").append(edad);
  60.        return sb.toString();
  61.    }
  62.  
  63.  
  64. }
  65.  
  66.  

Código
  1. public class PersonalDeInformatica extends AbstractBasePersona {
  2.  
  3.    private boolean esDeInformatica;
  4.  
  5.    public PersonalDeInformatica() {
  6.        super();
  7.    }
  8.  
  9.    public PersonalDeInformatica(final String nombre,final int edad, boolean esDeInformatica) {
  10.        super(nombre,edad);
  11.        this.esDeInformatica = esDeInformatica;
  12.    }
  13.  
  14.    @Override
  15.    public void introducirDatos() {
  16.        /**
  17.          * Introducir los datos basicos por defecto, Nombre y Edad
  18.          */
  19.        super.introducirDatos();
  20.  
  21.        // pedimo si es personal de informatica
  22.  
  23.        mostrar("Personal del Informtica ?");
  24.        esDeInformatica = LEER.nextBoolean();
  25.  
  26.        //setemos el tipo de persona
  27.        setEsDeInformatica(esDeInformatica);
  28.    }
  29.  
  30.    public boolean isEsDeInformatica() {
  31.        return esDeInformatica;
  32.    }
  33.  
  34.    public void setEsDeInformatica(boolean esDeInformatica) {
  35.        this.esDeInformatica = esDeInformatica;
  36.    }
  37.  
  38.    @Override
  39.    public String toString() {
  40.        final StringBuilder sb = new StringBuilder();
  41.        sb.append(super.toString());
  42.        sb.append("\nEs de informatica ? ").append(esDeInformatica);
  43.        return sb.toString();
  44.    }
  45. }
  46.  
  47.  

Código
  1. /**
  2.  *
  3.  */
  4. public class PersonalDeLimpieza extends AbstractBasePersona {
  5.  
  6.    private boolean esDeLimpieza; //por defecto la variable de instancia boolean, es false
  7.  
  8.    public PersonalDeLimpieza() {
  9.        super();
  10.    }
  11.  
  12.    public PersonalDeLimpieza(final String nombre, final int edad, final boolean esDeLimpieza) {
  13.        super(nombre,edad);
  14.        this.esDeLimpieza = esDeLimpieza;
  15.    }
  16.  
  17.    public boolean isEsDeLimpieza() {
  18.        return esDeLimpieza;
  19.    }
  20.  
  21.    public void setEsDeLimpieza(boolean esDeLimpieza) {
  22.        this.esDeLimpieza = esDeLimpieza;
  23.    }
  24.  
  25.    @Override
  26.    public void introducirDatos() {
  27.        //invocamo al introducir datos de la superClaseAbstracta
  28.        super.introducirDatos();
  29.  
  30.        // pedimo si es personal de limpieza
  31.  
  32.        mostrar("Personal del limpieza ?");
  33.        esDeLimpieza = LEER.nextBoolean();
  34.  
  35.        //setemos el tipo de persona
  36.        setEsDeLimpieza(esDeLimpieza);
  37.  
  38.    }
  39.  
  40.    @Override
  41.    public String toString() {
  42.        final StringBuilder sb = new StringBuilder();
  43.        sb.append(super.toString());
  44.        sb.append("\nPersonal de Limpieza ? ").append(isEsDeLimpieza()).append("\n");
  45.        return sb.toString();
  46.    }
  47.  
  48. }
  49.  
  50.  


Código
  1. import java.util.LinkedList;
  2.  
  3. /**
  4.  *
  5.  */
  6. public class Principal {
  7.  
  8.    private final LinkedList<IPersonal> iPersonalLinkedList = new LinkedList<>();
  9.  
  10.  
  11.    public Principal() {
  12.        init();
  13.    }
  14.  
  15.    private void init() {
  16.  
  17.        final PersonalDeLimpieza personalDeLimpieza = new PersonalDeLimpieza();
  18.        personalDeLimpieza.introducirDatos();
  19.  
  20.        final PersonalDeInformatica personalDeInformatica = new PersonalDeInformatica();
  21.        personalDeInformatica.introducirDatos();
  22.  
  23.        /**
  24.          * Anadimos a todos los objetos que extienden/implementan a IPersonal
  25.          * para procesarlos de manera polimorfica gracias, a que cada uno,
  26.          * sobreEscribe a toString().
  27.          */
  28.        iPersonalLinkedList.add(personalDeLimpieza);
  29.        iPersonalLinkedList.add(personalDeInformatica);
  30.  
  31.        /**
  32.          * Se invocara al metodo toString() de cada Objeto, implicitanmente
  33.          */
  34.        //java 8
  35.        iPersonalLinkedList.forEach(e -> e.mostrar(e));
  36.  
  37.        //java 7
  38.        /*for(IPersonal tmp : iPersonalLinkedList) {
  39.             tmp.mostrar(tmp.toString());
  40.         }*/
  41.  
  42.    }
  43.  
  44.    public static void main(String ...blabla) {
  45.        new Principal();
  46.    }
  47. }
  48.  

Salida

Código
  1. Introduce nombre:
  2. Ana
  3. Introduce edad
  4. 14
  5. Personal del limpieza ?
  6. false
  7. Introduce nombre:
  8. rubn
  9. Introduce edad
  10. 30
  11. Personal del Informtica ?
  12. true
  13.  
  14. Persona
  15. Nombre: Ana
  16. Edad: 14
  17. Personal de Limpieza ? false
  18.  
  19.  
  20. Persona
  21. Nombre: rubn
  22. Edad: 30
  23. Es de informatica ? true
  24.  
  25. Process finished with exit code 0
  26.  

Un ejemplo sencillo, luego chekeate el patrón Builder  >:D , y Abstract Generic Builder , con interfaces también (te aseguro que te gustara, y trabajaras mejor con inmutabilidad)
656  Seguridad Informática / Seguridad / Re: localizar celular por imei en: 30 Marzo 2019, 14:38 pm
me robaron mi celular lo puedo encontrar mediante mi imei

Anda donde tu operador, y reportalo como robado, pero quizás ese maleante o X, pueda reparar ese imei y pueda usarlo siendo mas fácil en Android, en IOs tendría que cambiar la nandFlash donde esta la configuración del imei, pero no lo creo de verdad.
657  Programación / Java / Re: Metodo mostrar todos los atributos de un objeto por pantalla en: 30 Marzo 2019, 02:07 am
Buenas mi duda era si habia alguna forma de mostrar todos los atributos de un objeto, porque la verdad me canse de escribir mucho sout y llamar a los metodos Getters, alguna técnica porfis   :-(

Puedes sobreescribir el metodo toString() ,pero como tienes el código?
658  Programación / Java / Re: Clase Lista en: 28 Marzo 2019, 17:37 pm
Seguro? no te faltó algo a la hora de declarar la lista de Persona?  :huh:

:-\ estoy 90% seguro que no probaste el ejemplo, o no hiciste el import bien, que este último no lo creo.

Y eso que lo escribo desde mi Android .

 El operador diamante puede ir vacío también, como con el objeto en el, pero siendo redundante, o sea,


 
Código
  1. final LinkedList<Persona> lista = new LinkedList<Persona>(); // redundante
659  Programación / Java / Re: Clase Lista en: 28 Marzo 2019, 07:07 am
Hola tengo una duda como hago para crear una LinkedList(); de objetos?

Crea tu javabean primero , la típica clase con setters y getters, y luego usas el método add() de la list  :D

Código
  1. final LinkedList<Persona> list = new LinkedList<>();
  2. list.add(new Persona("Beginner","web",14));
  3.  

El Bean persona con 3 atributos, 2 String , y un int o Integer, faltarían los setters y getters para acceder a dichos atributos, ojo los setters quitan inmutabilidad a un objeto haciendo que no sean aptos para un ambiente de concurrencia, si es inmutable tu bean, o sea:

  * Clase con final (public final class Persona) para que no se pueda heredar.
  * Sin setters
  * Variables de instancia con final
   - y puedes añadir por comodidad una clase estática dentro Aka Builder/AbstractoGenerico para inicializar sus variables de instancia pues mucho mejor, ya que este te creará una copia mutable de Persona con la que puedes trabajar.
660  Programación / Java / Re: Evitar duplicados en Jtable en: 25 Marzo 2019, 00:16 am
Buenas noches,

Necesito ayuda con mi proyecto en Java lo tengo prácticamente finalizado pero esto es lo único que me tiene estancado,

Quiero evitar duplicados de la columna código de cliente de un Jtable, al darle clic al botón "Guardar", evalué si no hay código con ese valor lo guarde en la tabla si ya existe este código muestre la excepción que "Código del cliente ya existe" y no guarde.

Les agradecería su ayuda,

Saludos.

Si se puede pero muestra algo de código a ver como la tienes?...

 >:D

Código
  1. package foro;
  2.  
  3. import javax.swing.*;
  4. import javax.swing.border.TitledBorder;
  5. import javax.swing.table.DefaultTableModel;
  6. import java.awt.*;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9.  
  10. /**
  11.  * @Autor rub´n y google
  12.  */
  13. public class JTableAvoidDuplicados extends JFrame {
  14.  
  15.    private final DefaultTableModel defaultTableModel = new DefaultTableModel();
  16.    private final JTable table = new JTable(defaultTableModel);
  17.    private final JScrollPane jScrollPane = new JScrollPane(table);
  18.    private final JButton button = new JButton("Aceptar");
  19.    private final JTextField textField = new JTextField();
  20.  
  21.    public JTableAvoidDuplicados() {
  22.        init();
  23.  
  24.        setSize(500, 100);
  25.        pack();
  26.        setLocationRelativeTo(null);
  27.        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  28.        setVisible(true);
  29.    }
  30.  
  31.    private void init() {
  32.        final JComponent panelNorte = getPanelNorte();
  33.        final JComponent panelSur = getPanelSur();
  34.        panelNorte.add(panelSur, BorderLayout.SOUTH);
  35.        add(panelNorte);
  36.    }
  37.  
  38.    private JComponent getPanelNorte() {
  39.        final JPanel panel = new JPanel();
  40.        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
  41.        final TitledBorder titledBorder = new TitledBorder("PoC duplicados en JTable");
  42.        titledBorder.setTitleFont(new Font(Font.SANS_SERIF,Font.BOLD,16));
  43.        panel.setBorder(titledBorder);
  44.        panel.add(jScrollPane, BorderLayout.NORTH);
  45.        /**
  46.          * Filas de la table
  47.          */
  48.        defaultTableModel.addColumn("Codigo");
  49.        defaultTableModel.addRow(new Object[]{"codigo-0000"});
  50.        defaultTableModel.addRow(new Object[]{"codigo-0001"});
  51.        defaultTableModel.addRow(new Object[]{"codigo-0002"});
  52.        defaultTableModel.addRow(new Object[]{"codigo-0003"});
  53.  
  54.        return panel;
  55.    }
  56.  
  57.    private JComponent getPanelSur() {
  58.        final JPanel panelSur = new JPanel();
  59.        panelSur.setLayout(new BoxLayout(panelSur,BoxLayout.X_AXIS));
  60.        panelSur.setBorder(BorderFactory.createEmptyBorder(10, 0, 5, 0));
  61.        panelSur.add(new JLabel("Introduce codigo: "));
  62.        panelSur.add(Box.createHorizontalStrut(10));
  63.        panelSur.add(textField);
  64.        panelSur.add(Box.createHorizontalStrut(10));
  65.        panelSur.add(button);
  66.        initBehaviour();
  67.        return panelSur;
  68.    }
  69.  
  70.    private void initBehaviour() {
  71.        button.addActionListener(e -> tabla(table, textField));
  72.    }
  73.  
  74.    private void tabla(JTable tabla, JTextField jTextField) {
  75.        String s = "";
  76.        boolean exists = false;
  77.        for (int i = 0; i < tabla.getRowCount(); i++) {
  78.            s = tabla.getValueAt(i, 0).toString().trim();
  79.  
  80.            if (jTextField.getText().equals("")) {
  81.                JOptionPane.showMessageDialog(null, "Introduce un valor");
  82.                break;
  83.            } else if (jTextField.getText().equals(s)) {
  84.                exists = true;
  85.                break;
  86.  
  87.            }
  88.        }
  89.        if (!exists) {
  90.            final DefaultTableModel dd = (DefaultTableModel) tabla.getModel();
  91.            final List<String> lista = new ArrayList<>();
  92.            final String codigo = jTextField.getText();
  93.            if (!codigo.equals("")) {
  94.                lista.add(jTextField.getText());
  95.                dd.addRow(lista.toArray());
  96.            }
  97.        } else {
  98.            JOptionPane.showMessageDialog(null, "Codigo existente.");
  99.        }
  100.    }
  101.  
  102.    public static void main(String... gaga) {
  103.        try {
  104.            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  105.        } catch (Exception ex) {
  106.            ex.printStackTrace();
  107.        }
  108.        new Thread(JTableAvoidDuplicados::new).start();
  109.    }
  110.  
  111. }
  112.  

Páginas: 1 ... 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 [66] 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ... 140
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines