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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
/** * Proyecto: 9x05-Muestra letra DNI * Fichero: DNIGrafico.java * Fecha: 24/05/2012 * * Licencia (CC) BY-NC-SA: giltesa.com * * http://francho.org/2009/04/13/java-calculadora-sencilla-en-modo-grafico * http://www.javamexico.org/blogs/daniel/codigo_para_centrar_jframe */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DNIGrafico extends JFrame implements KeyListener { // PROPIEDADES: private JPanel panelBotones; // Creamos una variable en el que insertaremos los botones. private JTextField campoTexto; // También un campo de texto que hará de pantalla donde veremos los números y el resultado. private static final long serialVersionUID = -3263949043600021146L; // CONSTRUCTOR: public DNIGrafico() { // Se crea la ventana: super(); setSize(168, 100); // El tamaño de la ventana principal. setTitle("DNI"); // El titulo de la ventana. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // Para que cuando se cierre la ventana termine también el proceso. setResizable(false); // Bloquea la ventana para no permitir que se pueda cambiar de tamaño. JPanel ventana = (JPanel) this.getContentPane(); // ... ventana.setLayout(new BorderLayout()); // "Se indica que va a ser la ventana/panel/contenedor principal" // Se crean la pantalla (el campo de texto): campoTexto = new JTextField("", 1); // Instancia un campo de texto vacio de una columna. campoTexto.setFont(new Font("Arial", Font.BOLD, 25)); // Establece la fuente para el texto. campoTexto.setBackground(Color.WHITE); // El color de fondo. campoTexto.setEditable(false); // Hace que no se pueda escribir directamente sobre el campo (se capturan las teclas por eventos mas adelante) ventana.add("North", campoTexto); // Se coloca el campo de texto en la parte superior de la ventana. // Se crean los botones: panelBotones = new JPanel(); panelBotones.setLayout(new GridLayout(1, 2)); // Una botonera de 1 fila y 2 columnas. nuevoBoton("Calcular"); // Se llama al metodo privado que creara el boton. nuevoBoton("Borrar"); ventana.add("East", panelBotones); // Se añade la botonera a la parte inferior. // Revisar Con "South" no consigo poner los botones de un tamaño mayor mediante boton.setsize() campoTexto.addKeyListener(this); // Permite que la ventana pueda detectar pulsaciones del teclado. centrarVentana(); // Centra la ventana en el monitor del pc. validate(); // ... } // METODOS: // Crea un nuevo botón y después lo añade al panelBotones: private void nuevoBoton( String nombreBoton ) { JButton boton = new JButton(nombreBoton); // Se instancia el nuevo botón con el nombre recibido por valor. boton.addMouseListener(new MouseAdapter() // Al botón se le va a agregar la detección de eventos mediante el ratón, así se podrá saber si es pulsado el botón. { public void mouseReleased( MouseEvent evento ) { JButton boton = (JButton) evento.getSource(); // Cuando suceda un evento se recoge el botón que lo produjo. operacion(boton.getText()); // y se envía el texto del botón a operacion() campoTexto.requestFocus(); // Mantiene el foco en el campo de texto después de pulsar el botón. } }); panelBotones.add(boton); // Por ultimo se agrega el botón al panel de botones. } // Realiza la operación para calcular la letra del DNI: private void operacion( String nombreTecla ) { int dni; char letra; String letras = new String("TRWAGMYFPDXBNJZSQVHLCKE"); char ultCarCampoTexto; int numCarCampoTexto; // Es necesario, además de ejecutar el evento Calcular, que el campo de texto contenga números. if( !campoTexto.getText().isEmpty() && nombreTecla.equals("Calcular") ) { numCarCampoTexto = campoTexto.getText().length(); ultCarCampoTexto = campoTexto.getText().charAt(numCarCampoTexto - 1); // Además de la longitud del dni, hay que comprobar que no se pueda añadir mas números al campo de // texto si previamente se calculo la letra, ya que podría dar como resultado esto: "123Z25" = Error. if( numCarCampoTexto <= 8 && ultCarCampoTexto >= '0' && ultCarCampoTexto <= '9' ) { dni = Integer.parseInt(campoTexto.getText()); letra = letras.charAt(dni % 23); campoTexto.setText("" + dni + letra); } } else campoTexto.setText(""); } // Al implementar la interfaz KeyListener es obligatorio tener los tres métodos que actúan ante los eventos del teclado. // en este caso solo se usa el evento que actúa cuando se deja de pulsar la tecla. public void keyTyped( KeyEvent evento ){} public void keyPressed( KeyEvent evento ){} public void keyReleased( KeyEvent evento ) { int codCaracter = evento.getKeyCode(); char charCaracter = evento.getKeyChar(); int numCarCampoTexto = campoTexto.getText().length(); char ultCaracter = '0'; if( numCarCampoTexto != 0 ) ultCaracter = campoTexto.getText().charAt(numCarCampoTexto - 1); if( charCaracter >= '0' && charCaracter <= '9' && numCarCampoTexto < 8 && ultCaracter >= '0' && ultCaracter <= '9' ) campoTexto.setText(campoTexto.getText() + evento.getKeyChar()); else if( codCaracter == 10 ) operacion("Calcular"); else if( codCaracter == 8 && campoTexto.getText().length() != 0 ) campoTexto.setText(campoTexto.getText().substring(0, campoTexto.getText().length() - 1)); } // Este método se encarga de centrar la ventana principal: private void centrarVentana() { Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize(); // Se obtienen las dimensiones en píxels de la pantalla. Dimension ventana = getSize(); // Se obtienen las dimensiones en píxels de la ventana. setLocation((pantalla.width - ventana.width) / 2, (pantalla.height - ventana.height) / 2); // Una cuenta para situar la ventana en el centro de la pantalla. } } |
Mes: mayo 2012
9×04: Bicola generica usando un Vector o Referencias con Ficheros
Código para Bicolas genéricas usando Vectores (con ficheros):
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
/** * Proyecto: 9x04-Bicola - Vector y Ficheros * Fichero: Bicola.java * Fecha: 24/05/2012 * * Licencia (CC) BY-NC-SA: giltesa.com * * http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html * http://mundogeek.net/archivos/2009/03/11/generics-en-java/ */ import java.util.Vector; /*import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable;*/ import java.io.*; public class Bicola<G> implements Serializable { // PROPIEDADES: private Vector<Nodo<G>> vNodos; private static final long serialVersionUID = 3717013638745390665L; // CONSTRUCTOR: // Se instancia un Vector de Nodos Genericos. (Del tipo con el que instanciamos la Bicola). public Bicola() { vNodos = new Vector<Nodo<G>>(5, 2); } // METODOS: // Se devuelve el numero de elementos usados en el Vector. public int getNumDeNodos() { return vNodos.size(); } // Se añade un Nodo a la izquierda y se desplazan los demas una posicion a la derecha en el indice. public void addNodoIzquierda( G dato ) { vNodos.add(0, new Nodo<G>(dato)); } // Se añade al final del Vector un nuevo Nodo: public void addNodoDerecha( G dato ) { vNodos.addElement(new Nodo<G>(dato)); } // Se copia el primer elemento en temp, despues se elimina del Vector. public G getNodoIzquierda() { G temp = vNodos.firstElement().getDatoNodo(); vNodos.removeElementAt(0); return temp; } // Se copia el ultimo elemento en temp, despues se elimina del Vector. public G getNodoDerecha() { G temp = vNodos.lastElement().getDatoNodo(); vNodos.removeElementAt(vNodos.size() - 1); return temp; } // Se concatenan todos los elementos del Vector en cadena y luego se devuelve. public String toString() { String cadena = ""; for( int i = 0; i < vNodos.size(); i++ ) cadena += vNodos.get(i).getDatoNodo() + ", "; return cadena; } // Lee un objecto Bicola desde el fichero backup y se devuelve por "valor". public Bicola<G> readBicolaFichero() { FileInputStream fichEntrada = null; ObjectInputStream objEntrada = null; Bicola<G> temp = null; try { fichEntrada = new FileInputStream("backup.dat"); objEntrada = new ObjectInputStream(fichEntrada); temp = (Bicola<G>) objEntrada.readObject(); } catch( FileNotFoundException e ) { System.out.println("El sistema no puede encontrar el archivo especificado"); } catch( ClassNotFoundException e ) { System.out.println("El contenido leido en \"backup.dat\" no era el esperado."); } catch( Exception e ) { System.out.println(e); } finally { // Como ultimo paso se cierran los ficheros. try { if( objEntrada != null ) objEntrada.close(); if( fichEntrada != null ) fichEntrada.close(); } catch( Exception e ) { System.out.println(e); } } return temp; } // Recibe por referencia un objeto Bicola que es guardado en el fichero backup. public void writeBicolaFichero( Bicola<G> bicola ) { FileOutputStream fichSalida = null; ObjectOutputStream objSalida = null; try { fichSalida = new FileOutputStream("backup.dat"); objSalida = new ObjectOutputStream(fichSalida); objSalida.writeObject(bicola); } catch( FileNotFoundException e ) { System.out.println("El sistema no puede encontrar el archivo especificado"); } catch( Exception e ) { System.out.println(e); } finally { // Como ultimo paso se cierran los ficheros. try { if( objSalida != null ) objSalida.close(); if( fichSalida != null ) fichSalida.close(); } catch( Exception e ) { System.out.println("No se pudo cerrar el fichero."); } } } } |
Leer más
Cable OTG (USB Host) para Xperia Pro
Un cable OTG (On-The-Go) es un cable que nos permite conectar dispositivos tales como pendrives, teclados, ratones, etc. directamente al móvil a través de su puerto USB.
Los conectores Mini y Micro USB cuentan con 5 pines, en cables normales se usan 4 (dos para la corriente y otros dos para los datos), sin embargo en los cables OTG, el quinto pin esta conectado a masa, de esta forma el móvil, que ha de ser compatible con esta tecnología, puede saber si ha de funcionar como esclavo, cuando lo conectamos al ordenador con un cable normal, o como maestro, cuando le conectamos periféricos con un cable OTG.
Leer másCámara Xperia Pro
Nada que ver con los anteriores móviles 😛
Rootear Sony ericsson Xperia Pro MK16i/a (gingerbread)
Antes de empezar debemos de saber que es ser root y que conseguimos con ello, ya que no es imprescindible que lo seamos en la mayoría de los casos.
Ser root es disponer de todos los privilegios del sistema para hacer lo que queramos. Ya que normalmente cuando usamos el dispositivo lo hacemos con una cuenta de usuario con ciertos privilegios, en general esos privilegios nos permiten hacer la gran mayoría de tareas. Sin embargo hay algunas de ellas que solo las podemos realizar si contamos con los permisos suficientes y puesto que con nuestra cuenta de usuario no los tenemos… debemos de recurrir a la cuenta de administrador o superusuario.
Un ejemplo claro y del que seguro la mayoría nos hemos dado cuenta, es cuando usamos Windows y al instalar un programa se advierte y se nos pide permisos de administrador para poder instalar dicha aplicación.
Algunos ejemplos en los que necesitamos seer root:
El principal motivo es poder deshacernos de las aplicaciones de serie que no nos interesen, estas aplicaciones están instaladas como del sistema y por lo tanto una cuenta normal no tiene permisos para desinstalarlas, solo una cuenta de superusuario puede hacerlo.
Otro motivo muy importante también es para poder realizar copias de seguridad de las aplicaciones y de sus configuraciones. También de los SMS, historial de llamadas, etc.
O para poder controlar el móvil remotamente y poder recuperarlo ante un robo, por ejemplo.
Leer másSony Ericsson Xperia Pro MK16i
Casi dos años después, de la HTC Desire, vuelve a tocar cambiarse de móvil. En esta ocasión el móvil elegido es un Sony Ericsson Xperia en su versión Pro con teclado qwerty físico. Mi segundo móvil con teclado, el primero fue un Qtek 9100.
Leer más9×03: Bicola generica usando un Vector o Referencias
Código para Bicolas genéricas usando Vectores:
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 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 |
/** * Proyecto: 9x03-Bicola - Vector * Fichero: Bicola.java * Fecha: 17/05/2012 * * Licencia (CC) BY-NC-SA: giltesa.com * * http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html * http://mundogeek.net/archivos/2009/03/11/generics-en-java/ */ import java.util.Vector; public class Bicola<G> { // PROPIEDADES: private Vector<Nodo<G>> vNodos; // CONSTRUCTOR: // Se instancia un Vector de Nodos Genericos. (Del tipo con el que instanciamos la Bicola). public Bicola() { vNodos = new Vector<Nodo<G>>(5, 2); } // METODOS: // Se devuelve el numero de elementos usados en el Vector. public int getNumDeNodos() { return vNodos.size(); } // Se añade un Nodo a la izquierda y se desplazan los demas una posicion a la derecha en el indice. public void addNodoIzquierda( G dato ) { vNodos.add(0, new Nodo<G>(dato)); } // Se añade al final del Vector un nuevo Nodo: public void addNodoDerecha( G dato ) { vNodos.addElement(new Nodo<G>(dato)); } // Se copia el primer elemento en temp, despues se elimina del Vector. public G getNodoIzquierda() { G temp = vNodos.firstElement().getDatoNodo(); vNodos.removeElementAt(0); return temp; } // Se copia el ultimo elemento en temp, despues se elimina del Vector. public G getNodoDerecha() { G temp = vNodos.lastElement().getDatoNodo(); vNodos.removeElementAt(vNodos.size() - 1); return temp; } // Se concatenan todos los elementos del Vector en cadena y luego se devuelve. public String toString() { String cadena = ""; for( int i = 0; i < vNodos.size(); i++ ) cadena += vNodos.get(i).getDatoNodo() + ", "; return cadena; } } |
Leer más