Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Libreria Javafx Diseño
Manual Libreria Javafx Diseño
2.x
Java FX 2.X
Dentro de este manual, usted aprenderá a manejar la Tecnología Java Fx, para competir contra
aplicaciones desarrolladas en Microsoft Silver Light. Java Fx es el Homologo de Silver Light, Las
interfaces se ven mucho mejor, y permite efectos tipo Flash para dar un mejor aspecto al Front End de
las aplicaciones desarrolladas. Este manual lo desarrollo puesto que no existen manuales libres para
aprender. By : John Michel Rivera de León. Lionheart 815@hotmail.com
JAVA FX 2.x
Java FX 2.X
La principal ventaja de Java FX es que la aplicación puede correr
tanto en web, como en Stand Alone, sin necesidad de modificar
ninguna línea de código.
Java FX
Esto nos permite ser más agiles en el desarrollo, puesto que ya no se
tiene que pensar en cómo presentar en web una aplicación que era Con este manual, usted
para escritorio. Además Java FX, puede correr en TV’s, celulares, etc. aprenderá a manejar
Claro que solo en los dispositivos de nueva generación. esta tecnología que nos
JavaFX es una familia de productos y tecnologías pensados para el permite crear
desarrollo de “Rich Internet Applications” (RIA’s). Este producto es la
aplicaciones
contrapartida de SUN, para las herramientas de desarrollo de este
tipo de aplicaciones, como Flash de ADOBE y Silverlight de visualmente más
JAVA FX 2.x
MICROSOFT. Una de las características principales de esta tecnología atractivas. La ventaja de
es la posibilidad del desarrollo de interfaces visuales para escritorio,
manejar Java FX y no
web, dispositivos móviles y TV; con todo el soporte de JAVA SE,
JAVA EE y JAVA ME. Silver Light, es que
dispone de la
portabilidad y todas las
ventajas inherentes de
Java.
2
By: John Michel Rivera de León
JAVA FX 2.x
3
By: John Michel Rivera de León
Requerimientos
NOTA IMPORTANTE: Los métodos pueden parecerte extraños, y aquí se explica de manera
general como funcionan, pero se incluye la carpeta de la documentación del API con ejemplos
para comprender mejor cómo funcionan. Así que no te desanimes si vez que no está explicado
todo el código aquí ya que es mucha documentación para meterla dentro de este manual.
Adjunto la carpeta con toda la documentación necesaria para aprender a fondo.
Muy bien, lo primero que necesitamos para crear aplicaciones con Java FX, es el siguiente
software:
1. JDK 1.7
2. JRE 7
3. Librerias Apache FOP
4. Librerias Bar Code (para código QR)
5. Conector MySQL
JAVA FX 2.x
Los paquetes de los cuales se componen el sistema están asociados a distintas capas de
la arquitectura, a pesar de que algunos paquetes son implementados en distintas capas.
El siguiente diagrama describe la descomposición de las capas de la arquitectura y se
observa como cada capa está relacionada con el MVC.
Vista
Capa de Presentación
Controlador
Capa de Negocio
Modelo
4 Capa de Integración
By: John Michel Rivera de León
Arquitectura
JAVA FX 2.x
con el usuario así como mostrar por medio de una interfaz los resultados de las
transacciones realizadas.
Dentro de la capa de negociación se definen las reglas del negocio. Estas reglas del
negocio definen la forma en cómo debe de manejarse la información entre otras
cosas, dichas reglas establecen los límites que la aplicación debe respetar.
5
By: John Michel Rivera de León
JAVA FX 2.x
Paquetes
El sistema se compone de distintos paquetes que influyen en cada una de las capas de la
arquitectura, así mismo algunos paquetes se compone de otros sub-paquetes que
contienen utilidades o clases para su funcionamiento.
Paquete com.thegang.riping.view
Este hace uso de clases contenidas en el paquete de modelo y de POJOS para obtener
los datos.
Al loguearse correctamente es la interfaz principal donde se muestran las categorías de
las que el usuario puede hacer uso, estas tienen métodos asociados para la E/S de
información de las respectivas bases de datos utilizadas.
Paquete com.thegang.riping.modelo
El paquete de modelo hace uso de un patrón de diseño de J2EE que implementa DAO,
DTO, FACADE, DELEGATE. Estos están separados dentro de otros paquetes contenidos
dentro del paquete principal de modelo.
JAVA FX 2.x
Las clases contenidas dentro del paquete DAO se encargan de dar una independencia en
cuanto al acoplamiento con las bases de datos utilizadas, esto con es con la finalidad de
que si surgen cambios en la base de datos, solo tendrá que modificarse los componentes
de este paquete.
El paquete DTO contiene las clases encargadas de actuar como intermediarias entre la
capa de presentación y los servicios que provee la capa de negocios.
El paquete FACADE encapsula la lógica de negocio y la información asociada. La
información es mostrada por medio de interfaces y con esto se logra hacer transparente la
interacción entre los componentes internos del programa.
7
By: John Michel Rivera de León
Vista de Procesos
Desarrollando la aplicacion
Ya que estamos dentro, nos vamos a la sección de “Packaging” y activamos la opción “copy
Dependent Libraries”
JAVA FX 2.x
Aceptamos y ya estamos listos para empezar a programar.
Creamos una nueva clase llamada SwingInterop, esta contendrá la pantalla del login, y una vez
aceptado, este se ocultara y mostrara el menú principal de la aplicación. Creamos las
variables del tamaño de la aplicación.
/**
*/
launch(args);
@Override
btn.layoutBoundsProperty();
btn.setTranslateX(-170);
btn.setTranslateY(200);
btn.translateXProperty();
btn.translateYProperty();
btn.relocate(50, 300);
btn.setText("Ingresar");
10
btn.setEffect(ref);
By: John Michel Rivera de León
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
try{
JAVA FX 2.x
tab.setText("Proveedores");
tab.setClosable(false);
tab.setContent(new ProveedorView(name.getText(),new
LoginDAO().runQueryListUsersADMIN(name.getText(),pass.getText())).createProveedor(PANE
L_WIDTH_INT, PANEL_HEIGHT_INT));
tabPane.getTabs().add(tab);
root.getChildren().remove(btn);
root.getChildren().remove(name);
root.getChildren().remove(pass);
root.getChildren().remove(err);
root.getChildren().add(tabPane);
Se crea una nueva clase que se inserta dentro del tab, esta clase contiene dentro de un
nuevo StackPanel nuevos elementos para manejar la alta de proveedores.
ref.setFraction(0.9);
nomb.setTranslateX(-360);
nomb.setTranslateY(50);
nomb.setEffect(ef);
nomb1.setPromptText("Nombre de la persona...");
nomb1.setMaxSize(100, 20);
12
nomb1.setTranslateX(-280);
nomb1.setTranslateY(50);
By: John Michel Rivera de León
Dentro del código anterior se define el tamaño del nuevo Panel y se incluyen sus
elementos, se puede agregar efectos como el Glow, para hacer un poco borroso un
elemento, o el de Refleccion para que debajo del botón se vea un reflejo.
Se agrega el botón para que registre los datos dentro de la B.D
Button btn = new Button();
btn.layoutBoundsProperty();
btn.setTranslateX(-250);
btn.setTranslateY(110);
btn.translateXProperty();
btn.translateYProperty();
btn.relocate(50, 300);
btn.setText("Registrar");
btn.setEffect(ref);
JAVA FX 2.x
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
try{
p2.setProgress(0);
root.getChildren().add(ok);
p2.setProgress(100);
}catch(Exception e){JOptionPane.showMessageDialog(null, e);
}
} 13
});
By: John Michel Rivera de León
root.setMinSize(widthDouble, heightDouble);
root.setPrefSize(widthDouble, heightDouble);
return root;
Hacemos lo mismo con las otras clases que son un CRUD, Create, Read, Update, Delete.
Esto se repite con el resto de las tab’s, como son clientes, almance, etc.
Aquí utilizamos la librería Java Mail. Creamos una nueva clase como las anteriores, que se
inserta dentro de un tab, en el menú principal.
14
final StackPane root = new StackPane();
ref.setFraction(0.9);
t.setTranslateY(-200);
t.setFill(javafx.scene.paint.Color.WHITESMOKE);
t.setEffect(ef);
mail.setTranslateX(-360);
mail.setTranslateY(-40);
JAVA FX 2.x
mail.setEffect(ef);
mail1.setPromptText("PDF Path");
mail1.setMaxSize(100, 20);
mail1.setTranslateX(-280);
mail1.setTranslateY(-40);
mail1.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
mail1.setText(fc.showOpenDialog(null).getAbsolutePath());
15
}
By: John Michel Rivera de León
});
Para enviar el correo utilizamos los métodos de la librería Java Mail como sigue, en este caso
se realizo con un correo de Gmail, y los parámetros cambian si se realiza con Hotmail u otro.
btn.layoutBoundsProperty();
btn.setTranslateX(-250);
btn.setTranslateY(170);
btn.translateXProperty();
btn.translateYProperty();
btn.relocate(50, 300);
JAVA FX 2.x
btn.setText("Enviar");
btn.setEffect(ref);
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
try{
p2.setProgress(0);
try {
props.setProperty("mail.smtp.host", "smtp.gmail.com");
props.setProperty("mail.smtp.port", "587");
props.setProperty("mail.smtp.auth", "true");
session.setDebug(true);
//habe...el texto
texto.setText(tel1.getText());
JAVA FX 2.x
//el adjunto
adjunto.setFileName("Factura.pdf");
//juntar ambos
multiParte.addBodyPart(texto);
multiParte.addBodyPart(adjunto);
// A quien va dirigido
message.addRecipient(Message.RecipientType.TO, new
InternetAddress(rfc1.getText()));
message.setSubject(dir1.getText());
message.setContent(multiParte);
Transport t = session.getTransport("smtp");
t.connect(ide.getText(), name.getText());
t.sendMessage(message, message.getAllRecipients());
t.close();
} catch (MessagingException e) {
JOptionPane.showMessageDialog(null, e);
p2.setProgress(100);
});
btn.setOnMouseEntered(new EventHandler<MouseEvent>() {
18
@Override
p2.setProgress(0);
root.getChildren().remove(ok);
});
root.getChildren().add(id);
root.getChildren().add(ide);
root.getChildren().add(rfc);
root.getChildren().add(rfc1);
JAVA FX 2.x
root.getChildren().add(dir);
root.getChildren().add(dir1);
root.getChildren().add(tel);
root.getChildren().add(mail);
root.getChildren().add(mail1);
root.getChildren().add(tel1);
root.setMinSize(widthDouble, heightDouble);
root.setPrefSize(widthDouble, heightDouble);
return root;
19
By: John Michel Rivera de León
Para mostrar los graficos, creamos una nueva clase, especificamos sus medidas y
creamos un Panel interno para agregar los elementos.
//articulos
series1.setName("2003");
series1.getData().add(new XYChart.Data(austria, 25601.34));
series1.getData().add(new XYChart.Data(brazil, 20148.82));
series1.getData().add(new XYChart.Data(france, 10000));
series1.getData().add(new XYChart.Data(italy, 35407.15));
series1.getData().add(new XYChart.Data(usa, 12000));
bc.getData().addAll(series1);
bc1.getData().addAll(series1);
JAVA FX 2.x
chart.getData().add(new PieChart.Data("uno", 50));
chart.getData().add(new PieChart.Data("dos", 50));
final Label caption = new Label("");
caption.setTextFill(Color.DARKORANGE);
caption.setStyle("-fx-font: 24 arial;");
caption.setTranslateX(e.getX());
caption.setTranslateY(e.getY());
caption.setText(String.valueOf(data.getPieValue())
+ "%");
21
}
By: John Michel Rivera de León
});
}
@Override
public void handle(Event arg0) {
try {
bc.getData().remove(0);
JAVA FX 2.x
root.getChildren().remove(caption);
bc.getData().removeAll(series1);
bc.getData().removeAll(series1);
XYChart.Series series1 = new XYChart.Series();
series1.setName("Ventas");
22 i++;
}
By: John Michel Rivera de León
bc.getData().addAll(series1);
} catch (Exception ex) {
Logger.getLogger(ReporteView.class.getName()).log(Level.SEVERE,
null, ex);
}
}
});
JAVA FX 2.x
root.getChildren().add(accordion);
root.getChildren().add(caption);
root.setMinSize(widthDouble, heightDouble);
root.setPrefSize(widthDouble, heightDouble);
return root;
}
Esta clase esta de ejemplo en la documentación de Java Fx. Es mas sencillo que como se
realizaba anteriormente con Swing.
view.setPrefSize(widthDouble, heightDouble);
By: John Michel Rivera de León
eng.load("http://www.google.com");
if (warningLabel.isVisible()) {
warningLabel.setVisible(false);
}
JAVA FX 2.x
};
eng.getLoadWorker().progressProperty().addListener(handler);
locationField.setMaxHeight(Double.MAX_VALUE);
goButton.setDefaultButton(false);
eng.load(locationField.getText().startsWith("http://") ? locationField.getText()
: "http://" + locationField.getText());
};
goButton.setOnAction(goAction);
locationField.setOnAction(goAction);
24
eng.locationProperty().addListener(new ChangeListener<String>() {
locationField.setText(newValue);
});
grid.setPadding(new Insets(5));
grid.setVgap(5);
grid.setHgap(5);
GridPane.setConstraints(goButton, 1, 0);
JAVA FX 2.x
GridPane.setConstraints(warningLabel, 0, 2, 2, 1, HPos.CENTER, VPos.CENTER,
Priority.ALWAYS, Priority.SOMETIMES);
grid.getColumnConstraints().addAll(
return grid;
Todas estas clases se llaman en el menú principal y se insertan dentro de unos Tabs para
separar las distintas partes.
25
By: John Michel Rivera de León
Para esto generamos un archivos XML que se utilizan por Apache FOP para generar el PDF,
El generar la factura en PDF se localiza en el paquete de ventas, clase Crear venta, botón
“Generar Factura”.
este tiene el botón siguiente:
btnf.layoutBoundsProperty();
btnf.setTranslateX(-90);
btnf.setTranslateY(145);
btnf.translateXProperty();
JAVA FX 2.x
btnf.translateYProperty();
btnf.relocate(50, 300);
btnf.setText("Generar Factura");
btnf.setOnAction(new EventHandler<ActionEvent>() {
@Override
try {
char m='"';
fo.setLength(0);
Este botón tiene el listener que crea los XML con los datos de la venta y escribe estos datos
en formato XML dentro de los archivos para generar el PDF. Al final se utilizan los métodos de
la librería Apache FOP para convertir estos XML en un PDF, además se incluye la imagen en
26 Codigo QR con el numero de folio de la factura.
By: John Michel Rivera de León
//System.out.println("FOLIO FACT="+fact.getNextFolio());
fo.writeBytes("<xsl:stylesheet\n");
fo.writeBytes("xmlns:xsl="+m+"http://www.w3.org/1999/XSL/Transform"+m+"
version="+m+"1.0"+m+"\n");
fo.writeBytes("xmlns:fo="+m+"http://www.w3.org/1999/XSL/Format"+m+">\n");
fo.writeBytes("<fo:root xmlns:fo="+m+"http://www.w3.org/1999/XSL/Format"+m+">\n");
fo.writeBytes("<fo:layout-master-set>\n");
JAVA FX 2.x
fo.writeBytes("<fo:simple-page-master master-name="+m+"simple"+m+"\n");
fo.writeBytes("page-height="+m+"29.7cm"+m+"\n");
fo.writeBytes("page-width="+m+"21cm"+m+"\n");
fo.writeBytes("margin-top="+m+"1.5cm"+m+"\n");
fo.writeBytes("margin-bottom="+m+"1.5cm"+m+"\n");
fo.writeBytes("margin-left="+m+"2.5cm"+m+"\n");
fo.writeBytes("margin-right="+m+"2.5cm"+m+">\n");
fo.writeBytes("<fo:region-after extent="+m+"1.5cm"+m+"/>\n");
fo.writeBytes("</fo:simple-page-master>\n");
fo.writeBytes("</fo:layout-master-set>\n");
fo.writeBytes("<fo:page-sequence master-reference="+m+"simple"+m+">\n");
fo.writeBytes("<fo:static-content flow-name="+m+"xsl-region-before"+m+">\n");
fo.writeBytes("<fo:block\n"); 27
fo.writeBytes("font-size="+m+"15pt"+m+"\n");
fo.writeBytes("font-family="+m+"serif"+m+"\n");
By: John Michel Rivera de León
fo.writeBytes("color="+m+"blue"+m+"\n");
fo.writeBytes("line-height="+m+"14pt"+m+" >\n");
fo.writeBytes(""+emp1.getText()+"\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("<fo:block text-align="+m+"end"+m+"\n");
fo.writeBytes("font-size="+m+"15pt"+m+"\n");
fo.writeBytes("font-family="+m+"serif"+m+"\n");
fo.writeBytes("color="+m+"blue"+m+"\n");
fo.writeBytes("line-height="+m+"14pt"+m+" >\n");
fo.writeBytes("FACTURA\n");
fo.writeBytes("</fo:block>\n");
JAVA FX 2.x
fo.writeBytes("<fo:block text-align="+m+"end"+m+"\n");
fo.writeBytes("font-size="+m+"14pt"+m+"\n");
fo.writeBytes("font-family="+m+"serif"+m+"\n");
fo.writeBytes("color="+m+"red"+m+"\n");
fo.writeBytes("line-height="+m+"14pt"+m+" >\n");
fo.writeBytes(""+fact.getNextFolio()+"\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("</fo:static-content>\n");
fo.writeBytes("<fo:flow flow-name="+m+"xsl-region-body"+m+">\n");
fo.writeBytes("<fo:block font-size="+m+"7pt"+m+"\n");
fo.writeBytes("font-family="+m+"sans-serif"+m+"\n");
fo.writeBytes("line-height="+m+"10pt"+m+"\n");
fo.writeBytes("space-after.optimum="+m+"3pt"+m+"\n");
fo.writeBytes("font-weight="+m+"bold"+m+"\n");
28 fo.writeBytes("start-indent="+m+"1pt"+m+">\n");
fo.writeBytes("RFC:"+rfce1.getText()+"\n");
fo.writeBytes("</fo:block>\n");
By: John Michel Rivera de León
fo.writeBytes("<fo:block font-size="+m+"7pt"+m+"\n");
fo.writeBytes("font-family="+m+"sans-serif"+m+"\n");
fo.writeBytes("line-height="+m+"10pt"+m+"\n");
fo.writeBytes("space-after.optimum="+m+"3pt"+m+"\n");
fo.writeBytes("font-weight="+m+"bold"+m+"\n");
fo.writeBytes("start-indent="+m+"1pt"+m+" >\n");
fo.writeBytes(""+dire1.getText()+"\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("<fo:block font-size="+m+"7pt"+m+"\n");
JAVA FX 2.x
fo.writeBytes("font-family="+m+"sans-serif"+m+"\n");
fo.writeBytes("line-height="+m+"10pt"+m+"\n");
fo.writeBytes("font-weight="+m+"bold"+m+" >\n");
fo.writeBytes("\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("<fo:block font-size="+m+"7pt"+m+"\n");
fo.writeBytes("font-family="+m+"sans-serif"+m+"\n");
fo.writeBytes("line-height="+m+"10pt"+m+"\n");
fo.writeBytes("font-weight="+m+"bold"+m+">\n");
fo.writeBytes("-----------------------------------\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("<fo:block font-size="+m+"7pt"+m+"\n");
fo.writeBytes("font-family="+m+"sans-serif"+m+"\n"); 29
fo.writeBytes("line-height="+m+"10pt"+m+"\n");
fo.writeBytes("color="+m+"grey"+m+"\n");
By: John Michel Rivera de León
fo.writeBytes("font-weight="+m+"bold"+m+">\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("<fo:block font-size="+m+"7pt"+m+"\n");
fo.writeBytes("font-family="+m+"sans-serif"+m+"\n");
fo.writeBytes("line-height="+m+"10pt"+m+"\n");
fo.writeBytes("font-weight="+m+"bold"+m+">\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("<fo:block font-size="+m+"7pt"+m+"\n");
fo.writeBytes("font-family="+m+"sans-serif"+m+"\n");
fo.writeBytes("line-height="+m+"10pt"+m+"\n");
fo.writeBytes("font-weight="+m+"bold"+m+">\n");
fo.writeBytes(""+recabar[4]+"\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("<fo:block font-size="+m+"7pt"+m+"\n");
fo.writeBytes("font-family="+m+"sans-serif"+m+"\n");
fo.writeBytes("line-height="+m+"10pt"+m+"\n");
fo.writeBytes("font-weight="+m+"bold"+m+">\n");
fo.writeBytes(""+"R.F.C "+recabar[7]+"\n");
30 fo.writeBytes("</fo:block>\n");
By: John Michel Rivera de León
fo.writeBytes("<fo:table-column column-width="+m+"3cm"+m+"/>\n");
fo.writeBytes("<fo:table-column column-width="+m+"3cm"+m+"/>\n");
fo.writeBytes("<fo:table-column column-width="+m+"3cm"+m+"/>\n");
fo.writeBytes("<fo:table-column column-width="+m+"3cm"+m+"/>\n");
fo.writeBytes("<fo:table-body>\n");
fo.writeBytes("<fo:table-row>\n");
fo.writeBytes("<fo:block text-align="+m+"center"+m+">\n");
fo.writeBytes("Cantidad\n");
JAVA FX 2.x
fo.writeBytes("</fo:block>\n");
fo.writeBytes("</fo:table-cell>\n");
fo.writeBytes("<fo:block text-align="+m+"center"+m+">\n");
fo.writeBytes("Descripcion\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("</fo:table-cell>\n");
fo.writeBytes("<fo:block text-align="+m+"center"+m+">\n");
fo.writeBytes("Precio Unitario\n");
fo.writeBytes("</fo:block>\n");
31
fo.writeBytes("</fo:table-cell>\n");
By: John Michel Rivera de León
fo.writeBytes("<fo:block text-align="+m+"center"+m+">\n");
fo.writeBytes("Importe\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("</fo:table-cell>\n");
fo.writeBytes("</fo:table-row>\n");
///fin headers
JAVA FX 2.x
float subt=0;
float IVA=0;
float tot=0;
fo.writeBytes("</fo:block></fo:table-cell>"+"\n");
System.out.println("1----"+inf.elementAt(i+5));
32 fo.writeBytes("</fo:block></fo:table-cell>"+"\n");
System.out.println("2----"+recabarp[1]); //desc
By: John Michel Rivera de León
fo.writeBytes("</fo:block></fo:table-cell>"+"\n");
fo.writeBytes("</fo:block></fo:table-cell></fo:table-row>"+"\n");
System.out.println("4----"+inf.elementAt(i+6)); //imp
subt+=Double.parseDouble(""+inf.elementAt(i+7));
i+=9;
JAVA FX 2.x
} IVA+=subt*Float.parseFloat(iva1.getText()); tot= subt+IVA;
/*
while(txt2!=null){
fo.writeBytes(txt2+"\n");
txt2= mid.readLine();
mid.close();*/
////////////////////midle
fo.writeBytes("</fo:table-body>\n");
fo.writeBytes( "</fo:table>\n");
33
fo.writeBytes( " <fo:block font-size="+m+"7pt"+m+"\n");
fo.writeBytes( "font-family="+m+"sans-serif"+m+"\n");
By: John Michel Rivera de León
fo.writeBytes( "font-weight="+m+"bold"+m+"\n");
fo.writeBytes( "</fo:block>"+"\n");
fo.writeBytes( "<fo:table-body>"+"\n");
//////////////////////
JAVA FX 2.x
fo.writeBytes("</fo:block></fo:table-cell>"+"\n");
fo.writeBytes(""+subt+"\n");
fo.writeBytes("</fo:block></fo:table-cell></fo:table-row>"+"\n");
System.out.println(""+subt);
fo.writeBytes( "IVA"+"\n");
34
fo.writeBytes("</fo:block></fo:table-cell>"+"\n");
By: John Michel Rivera de León
fo.writeBytes(""+IVA+"\n");
fo.writeBytes("</fo:block></fo:table-cell></fo:table-row>"+"\n");
System.out.println(""+IVA);
fo.writeBytes( "TOTAL"+"\n");
fo.writeBytes("</fo:block></fo:table-cell>"+"\n");
JAVA FX 2.x
+m+" border-style=" + m +"solid"+m+"> <fo:block text-align="+m+"center"+m+">"+"\n");
fo.writeBytes(""+tot+"\n");
fo.writeBytes("</fo:block></fo:table-cell></fo:table-row>"+"\n");
System.out.println(""+tot);
/*
35
String txt3= fin.readLine();
while(txt3!=null){
By: John Michel Rivera de León
fo.writeBytes(txt3+"\n");
txt3= fin.readLine();
fin.close();
*/
fo.writeBytes("</fo:table-body>\n");
fo.writeBytes("</fo:table>\n");
fo.writeBytes("<xsl:apply-templates/>\n");
fo.writeBytes("<fo:block font-size="+m+"10pt"+m+"\n");
JAVA FX 2.x
fo.writeBytes("font-family="+m+"sans-serif"+m+"\n");
fo.writeBytes("line-height="+m+"11pt"+m+"\n");
fo.writeBytes("space-before.optimum="+m+"2cm"+m+">\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("</fo:flow>\n");
fo.writeBytes("</fo:page-sequence>\n");
fo.writeBytes("</fo:root>\n");
fo.writeBytes("</xsl:template>\n");
fo.writeBytes("<fo:block font-size="+m+"14pt"+m+"\n");
fo.writeBytes("font-family="+m+"sans-serif"+m+"\n");
36 fo.writeBytes("space-before.optimum="+m+"3pt"+m+"\n");
fo.writeBytes("space-after.optimum="+m+"3pt"+m+"\n");
fo.writeBytes("text-align="+m+"center"+m+"\n");
By: John Michel Rivera de León
fo.writeBytes("padding-top="+m+"3pt"+m+">\n");
fo.writeBytes("<xsl:apply-templates/>\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("</xsl:template>\n");
fo.writeBytes("<fo:block font-size="+m+"16pt"+m+"\n");
fo.writeBytes("line-height="+m+"18pt"+m+"\n");
fo.writeBytes("padding-top="+m+"3pt"+m+"\n");
fo.writeBytes("space-before.optimum="+m+"3pt"+m+"\n");
fo.writeBytes("space-after.optimum="+m+"3pt"+m+"\n");
JAVA FX 2.x
fo.writeBytes("text-align="+m+"center"+m+"\n");
fo.writeBytes("start-indent="+m+"2cm"+m+"\n");
fo.writeBytes("end-indent="+m+"2cm"+m+"\n");
fo.writeBytes("background-color="+m+"red"+m+"\n");
fo.writeBytes("color="+m+"white"+m+">\n");
fo.writeBytes("<xsl:value-of select="+m+"."+m+"/>\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("</xsl:template>\n");
fo.writeBytes("<fo:block font-size="+m+"13pt"+m+"\n");
fo.writeBytes("line-height="+m+"14pt"+m+"\n");
fo.writeBytes("text-align="+m+"start"+m+">\n");
fo.writeBytes("<xsl:value-of select="+m+"."+m+"/>\n");
fo.writeBytes("</fo:block>\n"); 37
fo.writeBytes("</xsl:template>\n");
By: John Michel Rivera de León
fo.writeBytes("<fo:block font-size="+m+"11pt"+m+"\n");
fo.writeBytes("line-height="+m+"12pt"+m+"\n");
fo.writeBytes("font-family="+m+"sans-serif"+m+"\n");
fo.writeBytes("text-align="+m+"start"+m+"\n");
fo.writeBytes("start-indent="+m+"0.5cm"+m+">\n");
fo.writeBytes("<xsl:apply-templates/>\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("</xsl:template>\n");
fo.writeBytes("<fo:block font-size="+m+"10pt"+m+"\n");
fo.writeBytes("line-height="+m+"11pt"+m+"\n");
fo.writeBytes("font-family="+m+"Courier"+m+"\n");
fo.writeBytes("text-align="+m+"start"+m+"\n");
fo.writeBytes("start-indent="+m+"0.5cm"+m+"\n");
fo.writeBytes("wrap-option="+m+"wrap"+m+">\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("</xsl:template>\n");
//creo la img QR
int udm = 0;
int rotacion = 0;
codigoQR.setData("Folio: "+fact.getNextFolio());
codigoQR.setDataMode(QRCode.MODE_BYTE);
codigoQR.setUOM(udm);
codigoQR.setLeftMargin(margenIzq);
JAVA FX 2.x
codigoQR.setResolution(resolucion);
codigoQR.setRightMargin(margenDer);
codigoQR.setTopMargin(margenSup);
codigoQR.setBottomMargin(margenInf);
codigoQR.setRotate(rotacion);
codigoQR.setModuleSize(tamanoModulo);
codigoQR.renderBarcode(archivo);
fo.writeBytes("<fo:block font-size="+m+"10pt"+m+"\n");
fo.writeBytes("line-height="+m+"11pt"+m+"\n");
fo.writeBytes("font-family="+m+"Courier"+m+"\n"); 39
fo.writeBytes("text-align="+m+"start"+m+"\n");
fo.writeBytes("start-indent="+m+"0.5cm"+m+">\n");
By: John Michel Rivera de León
fo.writeBytes("Codigo QR:\n");
fo.writeBytes("<fo:external-graphic src="+m+"url('./nulllion.jpg')"+m+"/>");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("<fo:block space-after.optimum="+m+"3pt"+m+">\n");
fo.writeBytes("<xsl:apply-templates/>\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("</xsl:template>\n");
fo.writeBytes("<fo:block font-size="+m+"9pt"+m+"\n");
JAVA FX 2.x
fo.writeBytes("line-height="+m+"10pt"+m+"\n");
fo.writeBytes("text-align="+m+"start"+m+"\n");
fo.writeBytes("start-indent="+m+"1cm"+m+">\n");
fo.writeBytes("<xsl:value-of select="+m+"."+m+"/>\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("</xsl:template>\n");
fo.writeBytes("<fo:block font-size="+m+"13pt"+m+"\n");
fo.writeBytes("line-height="+m+"14pt"+m+"\n");
fo.writeBytes("text-align="+m+"start"+m+">\n");
fo.writeBytes("<xsl:value-of select="+m+"."+m+"/>\n");
fo.writeBytes("</fo:block>\n");
40 fo.writeBytes("</xsl:template>\n");
fo.writeBytes("<fo:block font-size="+m+"11pt"+m+"\n");
fo.writeBytes("text-align="+m+"start"+m+"\n");
fo.writeBytes("line-height="+m+"12pt"+m+">Values: <xsl:value-of
select="+m+"."+m+"/>\n");
fo.writeBytes("</fo:block>\n");
fo.writeBytes("</xsl:template>\n");
fo.writeBytes("</xsl:stylesheet>\n");
/////////////
JAVA FX 2.x
//se crea el xml
foxml.setLength(0);
foxml.writeBytes("<root>\n");
foxml.writeBytes("<div id="+m+"fo:basic-link"+m+">\n");
foxml.writeBytes("<fo> Factura</fo>\n");
foxml.writeBytes("<explanation>TESOEM</explanation>\n");
foxml.writeBytes("<properties>\n");
foxml.writeBytes("<property>...</property>\n");
foxml.writeBytes("</properties>\n");
41
foxml.writeBytes("</div>\n");
foxml.writeBytes("</div0></root>\n");
By: John Michel Rivera de León
foxml.close();
///
System.out.println("Preparando...");
// Setup directories
outDir.mkdirs();
JAVA FX 2.x
System.out.println();
System.out.println("Transformando...");
// Setup output
try {
// Setup XSLT
JAVA FX 2.x
// Set the value of a <param> in the stylesheet
transformer.setParameter("versionParam", "2.0");
// Resulting SAX events (the generated FO) must be piped through to FOP
transformer.transform(src, res);
} finally {
out.close(); 43
}
By: John Michel Rivera de León
System.out.println("Finalizado!");
try{
JOptionPane.showMessageDialog(null, e);
}catch(Exception e){}}
});
JAVA FX 2.x
Estos métodos ya los explique en otros manuales, donde se utiliza por medio de CMD la
invocación de Adobe Reader para mostrar el PDF.
Se adjunta toda la documentacion de Java Fx 2.x para conocer todos los metodos con
ejemplos implementados.
Esta aplicación la desarrolle con algunos amigos, como proyecto, así que el credito
tambien es de ellos
Aguilar Arteaga Fabio
Dias Tenorio Josue Arturo
Quiterio Vazques marcos
Flores Pimentel Ana Karina
Jimenez Carmona Luis Angel
44
By: John Michel Rivera de León
APENDICE
A
B
C
D
JAVA FX 2.x
F
G
H
I
J
JSP: Java Server Pages, tecnología que permite crear páginas web
dinámicas.
JDBC: Java Data Base Connectivity, permite establecer una conectividad
entre el lenguaje de programación JAVA y una base de datos.
K
L
M
Controlador
By: John Michel Rivera de León
Modelo
Vistas
N
O
P
Q
R
S
Session Factory: Es una representación de Hibérnate, este se encarga de
administrar las sesiones para ingresar a las bases de datos.
Servlet: El Servlet es un elemento de control, este procesa las peticiones
del usuario y devuelve una respuesta. El Servlet es un elemento que se
encuentra del lado del servidor y ahí mismo se ejecuta, puede trabajar en
conjunto con JSP.
T
U
UP: Unified Process, Esta metodología mejor conocida como RUP, ya que
su creador fue Rational Software. Esta metodología permite capturar la
información del proceso de desarrollo del software.
V
W
X
46 Y
Z