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 - Usuario Invitado

#341
Lo puedes hacer mediante AJAX. Envías la info al script, el script inserta los datos y devuelve una respuesta que será mostrada en el navegador en tiempo real.
#342
Java / Re: Meter un Frame dentro de otro Frame
18 Marzo 2015, 21:14 PM
Debes de colocar un getter estático para el Map que contiene las provincias y poblaciones, de tal modo que puedes obtener el Map fácil como:

Código (java) [Seleccionar]
Map<String, Set<Population>> provinces = ProvinceService.getProvinces();

Otra opción es que ProvincesService en lugar de tener el Map como propiedad, sea el mismo un Map. Esto se logra muy fácilmente extendiendo a alguna implementación de Map:

Código (java) [Seleccionar]

public class ProvinveService extends LinkedHashMap<String, Set<Population>> {

   private static ProvinceService instance = null;
   static { instance = new ProvinceService(); }

   private ProvinceService() {}

   public static ProvinceService getInstance() { return instance; }

}


Olvidemos que Singleton no sea muy recomendado. Aquí te sirve y punto. Recuerda que se usaría LinkedHashMap porque HashMap no respeta orden de inserción, cosa que sería un problema cuando haya que ordenarlo.

Los métodos como ordenar, obtenerPoblacion, etc quedarían igual. La única difefencia es que en lugar de hacer referencia al Map (que estaba como propiedad) hariamos referencia a this, porque ahora se hereda de LinkedHashMap.

Haciendo lo anterior puedes obtener el Map muy facilmente:

Código (java) [Seleccionar]
ProvinceService provinceService = ProvinceService.getInstance();
provinceService.addProvince("Madrid");
...


Ademas al hacer uso de un constructor privado evitas que se creen instancias de ProvinceService por lo que te aseguras que solo exista una instancia que será compartida entre todos los objetos.

CitarY otra pregunta por que en el codigo de tu clase principal el objeto controller de tipo mainWindowController lo llamas en todos los action listener, ¿por que?

ActionListener es una interface cuyo propósito es escuchar por eventos de acción (sea Enter o Clic). Al escuchar de forma general por eventos de acción puede escuchar un número ilimitado de controles cuya acción sea compatible (Button, TextField, entre otras). En mi respuesta anterior te indiqué que hacer una clase que inplemente ActionListener para cada botón no tiene ningún sentido.

MainWindowController, que implementa ActionListener escuchará todo control de MainWindow por eventos de acción: btnCreateProvince, btnCreatePopulation, btnUpdatePredictions, y todo control que sea escuchable por ActionListener.

Te preguntarás cómo identificar qué botón se ha clickeado. Bien, el objeto ActionEvent contiene información acerca del origen del desencadenamiento de la acción, origen del cual podemos saber su nombre (etiqueta del control) y de acuerdo al nombre realizar la acción deseada:

Código (java) [Seleccionar]
String targetLabel = e.getActionCommand();
if(targetLabel.equals("Crear Provincia")) {
   new NewProvinceDialog(gui).setVisible(true);
} else if(targetLabel.equals("Nueva población")) {
   new NewPopulationDialog(gui).setVisible(true);
} else if(targetLabel.equals("Actualizar predicciones


En resumen:

  • El Map que contiene las provincias y poblaciones al ser un objeto único que será usado en distintos contextos debe ser estático o heredar de LinkedHashMap y ser un singleton que pueda obtenerse desde todo contexto.

  • No es necesario usar una clase que implemente a un Listener por cada control a escuchar. Es repetitivo e inútil.
#343
Foro Libre / Re: Café diario a los 16 años
18 Marzo 2015, 00:30 AM
Personalmente el café no me aporta nada de energía. Lo que sí me aporta mucha energía es el té verde.
#344
Pero esto no vendría a ser el ejercicio en si. Puede usarse como una clase utilitaria incluso la puedes exportar como JAR y en algún otro proyecto, solo importas el JAR y haces uso de la clase sin necesidad de volver a crearla. Así nacen las librerías  ;)
#345
¿Muy largo? Jaja, en el mundo real esto es "muy pequeño". Pero es normal que se piense así cuando recién se está aprendiendo. Si no entendiste algo, házmelo saber para explicarte.
#346
Java / Re: simulacion de planta
17 Marzo 2015, 18:19 PM
Tienes varias alternativas, pero te recomiendo JavaFX por proveerte una API más extensa, rica y poderosa.

  • Usar la API de JavaFX para animaciones (Animation).
  • Crear la animación mediante WebGL y Three.js
  • Crear la animación con CSS3.
  • Crear las animaciones cada una distinta de acuerdo al factor climático como vídeo (hay editores donde no tendrías que codificar casi nada).

    Personalmente te recomiendo la segunda. La segunda y tercera opción se tendrían que mostrar en un WebView que es un control de JavaFX, que soporta HTML5 y no tendrías problemas en poderla visualizar.

    Si haces la animación en WebGL tendrías que predefinir el comportamiento que tendrá cada factor climático: sequía, lluvia, helada, etc. Es conveniente separarlos por módulos y tener el core o núcleo de la animación separada, ésta será la animación "normal". Al ser HTML/JS puedes crear tu barra de opciones y colocarla arriba cosa que la animación queda debajo de la barra de opciones (sequía, helada, lluvia, etc), que podrían ser checkboxes. Al hacer click en cada opción se añade el módulo especificado al comportamiento normal cambiando así la animación.

    Suena un poco complicado, pero con creatividad y estudio no creo que demores mucho en realizarlo.

    Saludos.

#347
Tendrías que crear un array con todos los caracteres extendidos. Ejemplo:

Código (java) [Seleccionar]
import java.util.Scanner;

public class Main {
    public static final char[] EXTENDED = { 0x00C7, 0x00FC, 0x00E9, 0x00E2,
            0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF,
            0x00EE, 0x00EC, 0x00C4, 0x00C5, 0x00C9, 0x00E6, 0x00C6, 0x00F4,
            0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2,
            0x00A3, 0x00A5, 0x20A7, 0x0192, 0x00E1, 0x00ED, 0x00F3, 0x00FA,
            0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD,
            0x00BC, 0x00A1, 0x00AB, 0x00BB, 0x2591, 0x2592, 0x2593, 0x2502,
            0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557,
            0x255D, 0x255C, 0x255B, 0x2510, 0x2514, 0x2534, 0x252C, 0x251C,
            0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566,
            0x2560, 0x2550, 0x256C, 0x2567, 0x2568, 0x2564, 0x2565, 0x2559,
            0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588,
            0x2584, 0x258C, 0x2590, 0x2580, 0x03B1, 0x00DF, 0x0393, 0x03C0,
            0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4,
            0x221E, 0x03C6, 0x03B5, 0x2229, 0x2261, 0x00B1, 0x2265, 0x2264,
            0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A,
            0x207F, 0x00B2, 0x25A0, 0x00A0 };
   
    public static final char getAsciiCharacter(int code) {
        if (code >= 0x80 && code <= 0xFF) {
            return EXTENDED[code - 0x7F];
        }
        return (char) code;
    }
   
    public static final int getAsciiCode(char character) {
        int code = (int) character;
        for(short i=0; i < EXTENDED.length; i++) {
            if(EXTENDED[i] == character)
                code = 128 + i;
        }
        return code;
    }

    public static final void printCharacter(int code) {
        System.out.printf("%c%n", getAsciiCharacter(code));
    }

    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
       
        System.out.print("Ingrese un carácter: ");
        char character = reader.next().charAt(0);
       
        int asciiCode = getAsciiCode(character);
       
        System.out.println("El carácter es "+ character +" y su código ascii es: " + asciiCode);
    }


}
#348
Eso no es práctico y no creo que sea funcional. Lo mejor que puedes hacer como te dijo Elektro es hacer implementar el KeyListener en otro lenguaje y mediante JNI o JNA. Te recomiendo que lo hagas en C/C++. Te dejo un enlace donde hay un ejemplo de esto.

Link: Java JNI C++ Hotkeys
#349
Java / Re: Meter un Frame dentro de otro Frame
17 Marzo 2015, 17:31 PM
Me has mal entendido. Eso no es modular, eso es repetitivo y viola el principio KISS (Keep it simple stupid). Ya te di las pautas para que lo hagas correctamente, depende de ti si las usas o no.

Código (java) [Seleccionar]
class VentanaCrearProvincia implements ActionListener {

244. public void actionPerformed(ActionEvent e) {

245. VentanaCrearProvincia dialog = new VentanaCrearProvincia();

246. dialog.setVisible(true);

247. }

248.

249. }


¿La clase VentanaCrearProvincia no aceptaba un Frame en el constructor para utilizarlo como padre?
#350
Foro Libre / Re: Que es un hacker?
17 Marzo 2015, 01:25 AM
Es totalmente válido debatir en clase y el docente debe de aceptar cuando se equivoca.

Un hacker informáticamente hablando, debe conocer y manejar las técnicas que le permitan invadir o cargarse un sistema. El hecho es que la profesora afirma en su diapositiva que un hacker es el que invade sistemas y que usa sus conocimientos con malas intenciones lo que, bajo mi punto de vista es algo denigrante para las comunidades hacktivistas.

Muy seguramente la universidad haya puesto a esa profesora a cargo de la asignatura cuando no es su especialidad.