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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ... 139
111  Programación / Java / Re: Mejorar Captura Firma Manuscrita en: 20 Febrero 2021, 05:19 am
Algo se avanzo pero el sueño no me deja... guiate abajo  :P

  • Código tomado del original y refactorizado, asi que creditos a esa gente tan aburrida  :xD
  • Añadido un JFileChooser para guardar la imagen resultante
  • Refactorización del JPanel para que se escriba dentro de el, y no en todo el JFrame como el codigo original
  • Sin test unitarios

FIXME

  • Refactorizar para que al redimenzionar el JFrame el JPanel de firmar, lo haga también
  • Quizas redimencionando el JPanel de firma bastaria, pero el BufferedImage abria que retocarlo eso creo.

MainJFrame

Código
  1. package com.signwithmouse;
  2.  
  3. import lombok.extern.slf4j.Slf4j;
  4.  
  5. import javax.swing.*;
  6. import javax.swing.border.TitledBorder;
  7. import java.awt.*;
  8.  
  9. /**
  10.  * https://foro.elhacker.net/java/problemas_con_app_simple_para_dibujar_firma_y_guardarla_como_imagen-t427969.0.html
  11.  *
  12.  * Nombre de clase = recogeFirma
  13.  * Descripcion = Clase encargada de capturar la firma que se dibuja en pantalla
  14.  *
  15.  * @version 1.0
  16.  * @author rubn
  17.  * @author google
  18.  * @author mas personas
  19.  */
  20. @Slf4j
  21. public class MainJFrame extends JFrame {
  22.  
  23.    private static final String TITLE = "App Firma";
  24.    private JButton jButtonBorrar = new JButton("Borrar");
  25.    private JButton jButtonGuardar = new JButton("Guardar");
  26.    private JLabel jLabelIL = new JLabel("Introduzca su firma");
  27.  
  28.    private final JPanel mainJPanel = new JPanel();
  29.    //Algo de Magia
  30.    private JPanelForSign jPanelForSign = new JPanelForSign();
  31.  
  32.    public MainJFrame() {
  33.  
  34.        this.configureJFrame();
  35.        this.configureJPanels();
  36.        this.initBehaviour();
  37.  
  38.    }
  39.  
  40.    private void configureJFrame() {
  41.        super.setResizable(false);
  42.        super.setPreferredSize(new Dimension(400,350));
  43.        super.add(mainJPanel);
  44.        super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  45.        super.pack();
  46.        super.setLocationRelativeTo(null);
  47.        super.setVisible(true);
  48.    }
  49.  
  50.    private void configureJPanels() {
  51.  
  52.        final TitledBorder border = new TitledBorder(TITLE);
  53.        border.setTitleJustification(TitledBorder.CENTER);
  54.        border.setTitlePosition(TitledBorder.TOP);
  55.  
  56.        this.mainJPanel.setBorder(border);
  57.        this.mainJPanel.setLayout(new BorderLayout());
  58.  
  59.        final JPanel panelFooter = new JPanel();
  60.        panelFooter.setLayout(new FlowLayout());
  61.        panelFooter.add(new JLabel());
  62.        panelFooter.add(jLabelIL);
  63.        panelFooter.add(jButtonBorrar);
  64.        panelFooter.add(jButtonGuardar);
  65.        mainJPanel.add(jPanelForSign);
  66.        mainJPanel.add(panelFooter,BorderLayout.SOUTH);
  67.        mainJPanel.setPreferredSize(new Dimension(450, 250));
  68.    }
  69.  
  70.    private void initBehaviour() {
  71.        jButtonBorrar.addActionListener(e -> {
  72.            //Blanquear la imagen de la firma
  73.            jPanelForSign.clearSignZone();
  74.        });
  75.        jButtonGuardar.addActionListener(e -> {
  76.            jPanelForSign.guardarFirma();
  77.        });
  78.    }
  79.  
  80.    public static void main(String... blabla) {
  81.        final String osType = System.getProperty("os.name");
  82.        try {
  83.            if(osType.contains("Win")) {
  84.                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
  85.            }else if(osType.contains("Linux")) {
  86.                UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
  87.            }
  88.        }catch(Exception ex) {}
  89.  
  90.        new Thread(MainJFrame::new).start();
  91.    }
  92.  
  93. }

JPanelForSign

Código
  1. package com.signwithmouse;
  2.  
  3. import com.signwithmouse.util.GetFileChooser;
  4. import lombok.extern.slf4j.Slf4j;
  5.  
  6. import javax.imageio.ImageIO;
  7. import javax.swing.*;
  8. import java.awt.*;
  9. import java.awt.event.MouseAdapter;
  10. import java.awt.event.MouseEvent;
  11. import java.awt.event.MouseMotionAdapter;
  12. import java.awt.image.BufferedImage;
  13. import java.io.IOException;
  14. import java.nio.file.Path;
  15. import java.util.concurrent.atomic.AtomicInteger;
  16.  
  17. /**
  18.  * JPanel donde se firmara
  19.  */
  20. @Slf4j
  21. public class JPanelForSign extends JPanel {
  22.  
  23.    private static final int WIDTH = 400;
  24.  
  25.    private BufferedImage bufferedImage = new BufferedImage(WIDTH, WIDTH, BufferedImage.TYPE_INT_ARGB);
  26.    private final AtomicInteger uX = new AtomicInteger();
  27.    private final AtomicInteger uY = new AtomicInteger();
  28.  
  29.    public JPanelForSign() {
  30.        super.setBackground(Color.WHITE);
  31.        super.requestFocus();
  32.        super.setBorder(BorderFactory.createEtchedBorder());
  33.        this.addMouseListener(new MouseAdapter() {
  34.            @Override
  35.            public void mousePressed(MouseEvent e) {
  36.                uX.set(e.getX());
  37.                uY.set(e.getY());
  38.                repaint();
  39.            }
  40.        });
  41.  
  42.        this.addMouseMotionListener(new MouseMotionAdapter() {
  43.            @Override
  44.            public void mouseDragged(MouseEvent e) {
  45.                final int x = e.getX();
  46.                final int y = e.getY();
  47.                final Graphics2D g2 = (Graphics2D) bufferedImage.getGraphics();
  48.                g2.setBackground(Color.WHITE);
  49.                g2.setColor(Color.BLACK);
  50.                g2.drawLine(uX.get(), uY.get(), x, y);
  51.                uX.set(x);
  52.                uY.set(y);
  53.                g2.dispose();
  54.            }
  55.        });
  56.  
  57.    }
  58.  
  59.    public void clearSignZone() {
  60.        this.createEmptyImage();
  61.        super.repaint();
  62.    }
  63.  
  64.    private void createEmptyImage() {
  65.        bufferedImage = new BufferedImage(super.getWidth(), super.getHeight(), BufferedImage.TYPE_INT_ARGB);
  66.        final Graphics2D g2d = (Graphics2D) bufferedImage.getGraphics();
  67.        g2d.setColor(Color.BLACK);
  68.    }
  69.  
  70.    @Override
  71.    public void paint(Graphics g) {
  72.        super.paint(g);
  73.        final Graphics2D graphics2D = (Graphics2D) g.create();
  74.        graphics2D.drawImage(bufferedImage, 0, 0, null);
  75.        super.repaint();
  76.    }
  77.  
  78.    /**
  79.      * Método que guarda la imagen generada
  80.      */
  81.    public void guardarFirma() {
  82.        final JFileChooser jFileChooser = GetFileChooser.getFileChooser(JFileChooser.DIRECTORIES_ONLY);
  83.        if (jFileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
  84.            Path path1 = jFileChooser.getSelectedFile().toPath();
  85.            final String fileN = path1.getFileName().toString();
  86.  
  87.            if(!fileN.endsWith(".png")) {//En caso de que no termine en .png se lo concatenamos
  88.                try {
  89.                    String fileName = path1.getFileName().toString().concat(".png");
  90.                    path1 = path1.resolveSibling(fileName);
  91.                    ImageIO.write(bufferedImage, "png", path1.toFile());
  92.                    JOptionPane.showMessageDialog(null, "Imagen creada correctamente!");
  93.                } catch (IOException e) {
  94.                    log.warn(e.getMessage());
  95.                    JOptionPane.showMessageDialog(null, "Error al guardar!");
  96.                }
  97.            } else {
  98.                try {
  99.                    final Path path2 = jFileChooser.getSelectedFile().toPath();
  100.                    ImageIO.write(bufferedImage, "png", path2.toFile());
  101.                    JOptionPane.showMessageDialog(null, "Imagen creada correctamente!");
  102.                } catch (IOException e) {
  103.                    log.warn(e.getMessage());
  104.                    JOptionPane.showMessageDialog(null, "Error al guardar!");
  105.                }
  106.            }
  107.        }
  108.    }
  109. }

Para guardar




Borrar la firma



112  Programación / Java / Re: Mejorar Captura Firma Manuscrita en: 19 Febrero 2021, 11:22 am
Suena interesante, pero de por si, no uses Applet eso esta deprecated, creo que extendiendo de un JPanel la historia seria mejor, vere que puedo hacer.
113  Comunicaciones / Redes / Re: Desbloqueo Router Arris TG2482A en: 18 Febrero 2021, 17:27 pm
Hola, al hacer ese proceso como obtengo la semilla?
Tengo la contraseñas de octubre y noviembre, pero no he podido obtener la semilla

Doc que quieres hacer? este post es sobre tener acceso a la vista "Advanced" del modem.
114  Programación / Java / Re: java.lang.UnsupportedClassVersionError en: 18 Febrero 2021, 02:46 am
Hola, estoy tratando de compilar un codigo y me sale el siguiente error:

Error: LinkageError occurred while loading main class Menu
java.lang.UnsupportedClassVersionError: Menu (class file version 58.65535) was compiled with preview features that are unsupported. This version of the Java Runtime only recognizes preview features for class file version 59.65535

Nose como hacer para solucionarlo, alguien podria ayudarme?

Muchas gracias

Creo que tienes la Jdk 14 y 15,

Usa la open jdk 11 esta es LTS
tanto para compilar y ejecutar. ajusta tu path.
115  Programación / Java / Re: proceso en segundo plano que me reemplaza paneles, en modo debugger funciona en: 11 Febrero 2021, 23:14 pm
Que tal doc, usa Geshi con Java, para que añadas una descripcion basica mas detallada, en las lineas mas potenciales si es posible.

Estas variables podria aplicar locks con synchronized() {} (siempre como ultima instancia, para evitar deadlocks), hacerlas inmutables o con Referencias atomicas, dado que estan en un background thread

- fParent
- jPanelCuerpo

Mismo para estas variables booleanas dentro del Thread Referencia Atomica

Código
  1. AtomicBoolean atomicBoolean = new AtomicBoolean();
- lupdateui
- linstancio

Aun asi, necesitaria mas codigo, sobre todo de las variables de instancia.



Otra cosa que no entiendo es la siguiente, si necesitas que los paneles se muestren de manera secuencial, es decir no paralela, porque implementas a Runnable?

Has intentado hacer todo sin sobreescribir el método run() ? el run es asíncrono, paralelo no secuencial, si quieres añade la clausula synchronized al método ya creado y comprueba su comportamiento


Código
  1. @Override
  2. public synchronized void run(){ }
116  Programación / Java / Re: Error occurred during initialization of boot layer en: 11 Febrero 2021, 23:01 pm
Doc de donde sacas este import ?

Código
  1. import net.miginfocom.swing.MigLayout;
117  Programación / Java / Re: Programar en Kotlin en: 22 Enero 2021, 20:09 pm
Kotlin, el enlace perdido entre java y scala...

Porque no lo aprendes? yo ni idea por los momentos, pero  si ya sabes C, eso supone una ventaja...
118  Programación / Java / Re: contribucion ejemplo de eventbus en: 18 Enero 2021, 03:13 am
se siente raro quedar hablando solo

Y acaso necesitas obligatoriamente que te respondan? Sapito tienes mas de 10 años en el foro, dejale eso a alguien con poco tiempo aqui  :xD , a mi cada vez que dices eso me da mucha risa.

Simple y llanamente sigue colaborando y ya, que tan dificil es?

ajjajaaa
119  Programación / Java / Re: Ejercicio programación Java en: 17 Enero 2021, 01:09 am
Buenas quería pedir un poco de ayuda para este ejercicio.. no quiero que lo resolváis entero ni nada sino una pequeña ayuda para empezar hacerlo ya que me bloqueado y nose por donde tirar..
quiero hacer un esquema de las clases y funciones que necesito en cada clase y luego unificarlo en el main pero no me sale nada.. aquí va el ejercicio, gracias

https://drive.google.com/file/d/1Ahr5bhHjRvU2i53UXF7C2phLpqAreHQt/view?usp=drivesdk

OK ahi se logra ver, lo que quieren, pero como tienes el codigo? llevas algo ahora?
120  Comunicaciones / Dispositivos Móviles (PDA's, Smartphones, Tablets) / Re: Te hacen cobrar en una tienda si haces un duplicado de nani sim a micro sim? en: 13 Enero 2021, 01:44 am
Posiblemente te cobren, a lo mejor , porque nano sim es mas pequeña que la version micro.

Igual anda a tu operador y consulta.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ... 139
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines