usar sirve que porque para escritorio bueno aplicaciones wpf javafx-2 javafx

wpf - porque - para que sirve javafx



¿Cómo se compara JavaFX con WPF? (2)

Soy principalmente un programador de C #, dejé de escribir Java hace unos 10 años, pero trato de mantenerme al día con la tecnología en Java leyendo artículos, hablando con amigos, etc.

He oído hablar del nuevo marco de GUI rico llamado JavaFX, pero no pude encontrar ningún recurso que lo compare con paralelos que no sean de Java.

Como estoy muy familiarizado con C # y WPF, me gustaría tener una idea de cuán similares o diferentes son las dos tecnologías.

EDITAR: Viendo que no hay respuestas, trataré de ser más específico:

  1. WPF usa XAML para crear el árbol visual, ¿tiene JavaFX algo similar?
  2. WPF se utiliza mejor con el enlace a un modelo de vista en un patrón MVVM, ¿JavaFX también hace un uso extensivo de enlace?
  3. WPF utiliza la GPU para renderizar, ¿hace JavaFX lo mismo?
  4. ¿Cómo se compara Silverlight con JavaFX cuando se ejecuta a través de un navegador en una net pc?

... Más por venir...

Estoy cambiando esto a la wiki de la comunidad para que las comparaciones puedan seguir actualizándose (con suerte).


Creo que la mejor forma de hacerte una idea de JavaFX es simplemente probarlo. Hay algunos buenos tutoriales en el sitio web de JavaFX. Aquí hay un par:

Son bastante rápidos y te dan una buena idea del idioma. Hay muchos otros en el sitio de JavaFX si está interesado en más tutoriales y artículos.

Para respuestas específicas a sus preguntas:

  1. JavaFX tiene su propio lenguaje declarativo para crear el "árbol visual" que no es un derivado xml. La interfaz de usuario se basa en un gráfico de escena para que pueda aplicar diversos efectos y animaciones a cualquier nodo del gráfico. Vea los tutoriales para más información. También hay una herramienta de diseño para JavaFX (que aún no he probado).
  2. JavaFX tiene enlaces integrados en el lenguaje .
  3. JavaFX en el escritorio utiliza Java AWT / Swing que usa renderización de GPU. Cada versión de Java parece descargar más de sus gráficos a la GPU. Chris Campbell de Sun ha escrito un blog acerca de la aceleración de la GPU . No estoy seguro si la versión móvil de JavaFX tiene aceleración GPU. Descubrí que las versiones anteriores de JavaFX no eran lo suficientemente eficaces para lo que necesitaba, pero sé que la última versión tiene importantes mejoras de rendimiento en comparación con versiones anteriores y todavía están trabajando en hacerlo más rápido.
  4. JavaFx usa Applets de Java para ejecutarse en el navegador. A partir de la actualización 10 de Java 6, el marco del applet de Java se ha rediseñado y, aunque no es tan fluido como Adobe Flash, se ha mejorado mucho. No estoy seguro de cómo se compara con Silverlight, aparte de que he tenido problemas para hacer que Silverlight trabaje en Linux, pero logré que JavaFX funcionara en Linux.

Aquí hay otra pregunta relacionada .


He estado aprendiendo JavaFX durante las últimas semanas. Aquí hay una descripción general de alto nivel de cómo se compara con WPF en mis ojos:

Todos mis comentarios están relacionados con JavaFX 2.0. Esta información probablemente estará sujeta a cambios ya que la plataforma aún es bastante inmadura y se está desarrollando activamente.

Gráficos

Al igual que WPF, JavaFX usa un sistema de renderización de gráficos retenido. La interfaz de usuario comprende un gráfico de escena que está compuesto por ''nodos'' que pueden considerarse conceptualmente similares al UIElement de WPF.

JavaFX descargará la representación de gráficos a la GPU si está disponible. El sistema de gráficos usa DirectX en Windows y OpenGL en otras plataformas.

Margen

Las interfaces de usuario de JavaFX se pueden crear tanto en código como a través de marcado FXML que es similar a XAML en que el gráfico de objetos se puede crear mediante elementos de anidación.

FXML tiene algunas características similares a XAML, como el enlace de propiedades (solo expresiones simples) y el enlace a los controladores de eventos (cualquier método onEvent ). Los controladores de eventos se pueden declarar en línea, pero normalmente se vincularía a un evento en el controlador asociado.

Los archivos FXML pueden tener un controlador asociado que le permite declarar manejadores de eventos complejos y establecer enlaces entre propiedades. Este es un controlador en el sentido MVC y no es lo mismo que un modelo de vista en el mundo de WPF (por lo general, un controlador tendrá referencias a nodos y controles).

Una diferencia con WPF es que parece que el FXML no está compilado en una representación binaria intermedia como BAML. No he notado ningún problema de rendimiento todavía, pero no he usado el sistema de manera exhaustiva. Sin embargo, he notado que FXML generalmente tiende a ser más corto que cualquier XAML ya que la plataforma aún lo alienta a escribir código y los estilos se declaran por separado.

Puede encontrar una introducción a FXML here .

Un generador de escenas se proporciona de forma gratuita (como en cerveza), por lo que si no le gusta la codificación manual de la interfaz de usuario, puede arrastrar y soltar elementos, establecer propiedades y vincular el código en su controlador y el FXML se generará automáticamente. Obviamente, el generador de escenas no es tan poderoso como Expression Blend, pero sigue siendo mejor que el ''diseñador'' proporcionado por Visual Studio.

Unión

JavaFX tiene una propiedad muy poderosa y un sistema vinculante. El patrón de Java Bean se ha ampliado para incluir clases que encapsulan una propiedad (similar a la forma en que las propiedades de dependencia de WPF representan las propiedades). Estas clases implementan interfaces que proporcionan invalidación y notificación de cambios.

Existe una distinción entre las notificaciones de invalidación y las notificaciones de cambio. Las invalidaciones solo indican que la expresión de enlace ahora no es válida y debe ser recalculada; el recálculo no ocurre realmente hasta que solicite el valor de la propiedad a través de sus métodos get() o getValue() . Sin embargo, si ha registrado un detector de cambios, la expresión se volverá a evaluar inmediatamente y todo lo que esté vinculado a esa propiedad reflejará los cambios.

JavaFX expone estas propiedades de forma similar a WPF con una propiedad get y set y un método que devuelve una instancia del contenedor de propiedades (que no son estáticas como las propiedades de WPF).

Enlaces complejos se pueden crear entre múltiples propiedades. ¿Desea que una propiedad entera sea la suma de otras dos (a = b + c)? No hay problema, JavaFX proporciona una API Fluent para expresar este tipo de relaciones.

A.Añadir (B, C);

Si el valor de B o C cambia, se generarán las notificaciones apropiadas para que el sistema sepa que A necesita ser reevaluado. Tenga en cuenta que en este caso, se lanzará una excepción si intenta establecer el valor de A como está vinculado a las otras propiedades, por lo que no tiene sentido en este contexto.

Estas expresiones pueden ser bastante complejas EG a = (b + c) * (d - e) y pueden incluir cualquier cantidad de propiedades. La API fluida es bastante fácil de leer y usar, pero no es tan buena como algunas de las API Fluent proporcionadas por algunas de las bibliotecas de Microsoft, pero esto se debe más a las limitaciones del lenguaje Java que a JavaFX.

Se pueden crear enlaces bidireccionales simples entre propiedades del mismo tipo, de modo que si uno se actualiza, el otro refleja automáticamente el cambio.

JavaFX también proporciona una API de bajo nivel para personalizar los enlaces usted mismo si desea crear una expresión de enlace personalizada que no sea proporcionada por la API o si le preocupa el rendimiento.

Una de las mayores diferencias entre JavaFX y WPF es que las vinculaciones se llevan a cabo principalmente en código en JavaFX frente a la forma WPF de establecer enlaces en el marcado.

here puede encontrar una introducción a las propiedades y enlaces.

Estilos

JavaFX usa CSS para cambiar el aspecto de los nodos contenidos en el gráfico de escena. Hay una especificación completa disponible que explica los tipos y las propiedades que se pueden establecer en cada tipo de nodo.

JavaFX también proporciona algunas adiciones que ayudan a mejorar CSS, como las variables que se pueden definir y usar en otro lugar.

.button { my-custom-color: RGB(234, 44, 78); } .my-control { -fx-background-color: my-custom-color }

También proporciona un par de funciones que le permiten derivar colores de otros colores previamente definidos que son útiles para crear cosas como degradados. Esto significa que se puede definir una paleta base de colores y el resto se puede generar a partir de estos valores (esto es lo que hace el archivo CSS predeterminado de JavaFX).

JavaFX CSS no le permite definir el tipo de diseño utilizado por un nodo (al escribir esto, todo el diseño debe realizarse en código). Esto funciona muy bien para mí, ya que este fue el único aspecto de CSS que realmente me causó dolor al usarlo con HTML.

Personalmente prefiero los estilos CSS a XAML que tienden a ser demasiado detallados para mi gusto.

Una guía de JavaFX CSS se puede encontrar here .

Diseño

JavaFX proporciona una serie de paneles de diseño que son similares a los proporcionados por WPF. Una diferencia que he notado es que el contrato de medida y diseño se define más arriba en la cadena de herencia en la clase Region .

Como se mencionó anteriormente, el diseño no se puede llevar a cabo mediante CSS, pero se puede expresar usando el código, FXML o creado con el generador de escenas (que finalmente se convierte a FXML).

Controles

JavaFX proporciona una biblioteca de controles cada vez mayor que hemos llegado a esperar. Una gran diferencia entre JavaFX y WPF es que los controles son esencialmente cuadros negros y no se pueden cambiar de plantilla de la manera en que lo hacen los controles de WPF. También parecen exponer muchas menos propiedades que los controles de WPF.

Los controles exponen algunas de las regiones específicas de implementación a CSS, lo que permite que áreas específicas de un control se orienten según sus estilos. Esto se conoce como la subestructura del control. Por ejemplo, un CheckBox expone dos subestructuras; la caja y la marca de verificación que permite que cada parte del control se diseñe de forma independiente. Tenga en cuenta que, como se describió anteriormente, solo el aspecto de un control puede modificarse mediante CSS, pero la sensación no puede. Por ejemplo, no se puede alterar drásticamente la forma en que TabPane establece su contenido alterando su panel de diseño interno de la manera que se puede con el WPF TabControl .

Si bien esto parece bastante limitante, la forma preferida de crear controles personalizados en JavaFX parece ser el uso de la composición a lo largo de las líneas derivadas de un panel de diseño para posicionar los controles estándar y rediseñarlos mediante CSS.

Conclusión

En general, estoy muy impresionado con lo que JavaFX tiene para ofrecer en este momento. Aunque no está tan maduro como WPF, se está desarrollando activamente y Oracle parece estar respaldando esto. El tiempo dirá si es exitoso o no.

Recomendaría probar JavaFX. Lea la documentation e intente armar una pequeña aplicación y vea lo que piensa.

También debe consultar FXExperience.com que se actualiza periódicamente con información del equipo de desarrollo.