Herramienta para generar contenido web
Los juegos de desafíos son como un imán para los usuarios de las redes sociales, los administradores de redes sociales les encanta estimular la participación de los usuarios web.Java es un lenguaje de propósito generar y excelente herramienta para construir un programa que automatice la generación de contenido web.
Java como constructor de herramientas que automaticen la generación de contenido para la web
Ejemplo 1: la imagen tiene un clásico problema donde hay que encontrar los valores correctos para x e y
Ejemplo 2: El siguiente ejercicio agrega una complejidad más, hay que calcular los valores faltantes
Ejemplo 3: Este ejemplo es de mayor complejidad, es necesario encontrar el valor de las letras para que se cumplan los valores indicados
Programa generador de contenido
Descargar el desarrollo del producto software realizado en JDeveloper 11g de Oracle y el archivo ejecutable JAR del siguiente enlace: Descargar desarrollo
Para ejecutar los archivos JAR debe tener la Maquina Virtual Java instalada en su computadora. Para descargar Java: https://java.com
Código fuente del desarrollo del producto software en Java
package client;public class Main {
public Main() {
super();
}
private static VentanaPrincipal vp = new VentanaPrincipal();
public static void main(String[] args) {
vp.setDefaultCloseOperation(vp.EXIT_ON_CLOSE);
vp.setLocationRelativeTo(null);
vp.setVisible(true);
}
}
package client;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JToolBar;
public class VentanaPrincipal extends JFrame {
File file = new File(".");
private String nl = System.getProperty("line.separator");
private Imagenes imagenes = new Imagenes();
private JPanel jPanel1 = new JPanel();
private BorderLayout borderLayout1 = new BorderLayout();
private GridLayout gridLayout1 = new GridLayout();
private JLabel[][] jLabelMatriz = new JLabel[7][7];
private Matriz matriz = null;
private JToolBar jToolBar1 = new JToolBar();
private JButton jButton2 = new JButton();
private JButton jButton3 = new JButton();
private JLabel jLabel1 = new JLabel();
private JButton jButton4 = new JButton();
private JCheckBox jCheckBox1 = new JCheckBox();
private JCheckBox jCheckBox2 = new JCheckBox();
private JCheckBox jCheckBox3 = new JCheckBox();
public VentanaPrincipal() {
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout(borderLayout1);
this.setSize(new Dimension(448, 404));
jPanel1.setLayout(gridLayout1);
jPanel1.setBackground(new Color(255, 132, 0));
gridLayout1.setRows(7);
gridLayout1.setColumns(7);
gridLayout1.setHgap(2);
gridLayout1.setVgap(2);
jButton2.setText("Nuevo");
jButton2.setToolTipText("Genera un nuevo contenido");
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton2_actionPerformed(e);
}
});
jButton3.setText("Guardar contenido");
jButton3.setToolTipText("Pone el ejercicio en el porta papeles y guarda un archivo con la solución");
jButton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton3_actionPerformed(e);
}
});
jLabel1.setText("https://carlosprivitera.blogspot.com.ar/");
jLabel1.setToolTipText("https://carlosprivitera.blogspot.com.ar/");
jButton4.setText("Configurar");
jButton4.setToolTipText("Permite elegir colores y tipo de letras");
jButton4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton4_actionPerformed(e);
}
});
jCheckBox1.setText("Op");
jCheckBox1.setToolTipText("Selecciona resolver las operaciones + -...");
jCheckBox1.setSelected(true);
jCheckBox2.setText("Div Mul");
jCheckBox2.setToolTipText("Incluir división y multiplicación");
jCheckBox2.setSelected(true);
jCheckBox2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jCheckBox2_actionPerformed(e);
}
});
jCheckBox3.setText("xy");
jCheckBox3.setToolTipText("Incluir variables x e y");
jCheckBox3.setSelected(true);
jCheckBox3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jCheckBox3_actionPerformed(e);
}
});
for(int x=0;x<7;x++){
for(int y=0;y<7;y++){
jLabelMatriz[x][y]=new JLabel();
jLabelMatriz[x][y].setText(""+ x + "" + y);
jLabelMatriz[x][y].setHorizontalAlignment(jLabelMatriz[x][y].CENTER);
jLabelMatriz[x][y].setOpaque(true);
jPanel1.add(jLabelMatriz[x][y], null);
}
}
this.getContentPane().add(jPanel1, BorderLayout.CENTER);
jToolBar1.add(jButton2, null);
jToolBar1.add(jButton3, null);
jToolBar1.add(jButton4, null);
jToolBar1.add(jCheckBox1, null);
jToolBar1.add(jCheckBox3, null);
jToolBar1.add(jCheckBox2, null);
this.getContentPane().add(jToolBar1, BorderLayout.NORTH);
this.getContentPane().add(jLabel1, BorderLayout.SOUTH);
this.setIconImage(imagenes.getImage());
this.setTitle("Generador de contenido");
matriz = new Matriz(jLabelMatriz);
matriz.setS(this.jCheckBox2.isSelected(),this.jCheckBox3.isSelected());
}
private void jButton2_actionPerformed(ActionEvent e) {
this.jButton2.setEnabled(false);
matriz.setS(this.jCheckBox2.isSelected(),this.jCheckBox3.isSelected());
this.jLabel1.setText("x="+matriz.getValorX()+" y=" + matriz.getValorY());
this.jButton3.setEnabled(true);
this.jButton2.setEnabled(true);
}
BufferedImage imagenPublicar = null;
BufferedImage imagenPublicar2 = null;
private void jButton3_actionPerformed(ActionEvent e) {
jButton3.setEnabled(false);
imagenPublicar = new BufferedImage(jPanel1.getWidth(), jPanel1.getHeight(), BufferedImage.TYPE_INT_RGB);
imagenPublicar2 = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D)imagenPublicar.getGraphics();
Graphics2D g2 = (Graphics2D)imagenPublicar2.getGraphics();
paint(g2);
try {
SimpleDateFormat formateador = new SimpleDateFormat("dd-MM-yyyy HH_mm_ss");
Date d = new Date();
ImageIO.write(imagenPublicar2, "png", new File(formateador.format(d) + "Solucion.png"));
matriz.borrarParaPublicar(jCheckBox1.isSelected(),jCheckBox3.isSelected());
jPanel1.paint(g);
ImageIO.write(imagenPublicar, "png", new File(formateador.format(d) + "Resolver.png"));
} catch (IOException es) {
String error = es.getMessage();
JOptionPane.showMessageDialog(null, "Error de archivo: " + error);
} catch (Exception es) {
String error = es.getMessage();
JOptionPane.showMessageDialog(null, "Error genérico de archivo: " + error);
}
try {
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable ponerEnPP = new Transferable(){
@Override
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException, IOException {
if (isDataFlavorSupported(flavor)) {
return imagenPublicar;
}
throw new UnsupportedFlavorException(flavor);
}
@Override
public DataFlavor[] getTransferDataFlavors() {
// TODO Auto-generated method stub
return new DataFlavor[] { DataFlavor.imageFlavor };
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
// TODO Auto-generated method stub
return DataFlavor.imageFlavor.equals(flavor);
}
};
cb.setContents(ponerEnPP, null);
} catch (Exception es) {
String error = es.getMessage();
JOptionPane.showMessageDialog(null, "Error genérico de portapapeles: " + error);
}
try {
JOptionPane.showMessageDialog(this,
"Se ha guardado en el portapapeles una imagen para publicar en redes sociales"+
nl+
"Se han guardado dos archivo en: " + file.getCanonicalPath()+
nl+
"Un archivo con la solución y otro con el desafio a publicar en redes sociales");
} catch (IOException f) {
}
}
Configurar configurar = new Configurar();
private void jButton4_actionPerformed(ActionEvent e) {
configurar.setLocationRelativeTo(null);
configurar.setDefaultCloseOperation(configurar.HIDE_ON_CLOSE);
configurar.jPanel1.setBackground(this.jPanel1.getBackground());
configurar.jLabel1.setBackground(this.jLabelMatriz[0][0].getBackground());
configurar.jLabel1.setFont(this.jLabelMatriz[0][0].getFont());
configurar.jLabel1.setForeground(this.jLabelMatriz[0][0].getForeground());
configurar.setVisible(true);
if(configurar.getAplicar()==1){
this.jPanel1.setBackground(configurar.jPanel1.getBackground());
for(int x=0;x<7;x++){
for(int y=0;y<7;y++){
jLabelMatriz[x][y].setBackground(configurar.jLabel1.getBackground()); //=new JLabel();
jLabelMatriz[x][y].setFont(configurar.jLabel1.getFont()); //setText(""+ x + "" + y);
jLabelMatriz[x][y].setForeground(configurar.jLabel1.getForeground()); //setHorizontalAlignment(jButton1[x][y].CENTER);
}
}
}
configurar.setAplicar(0);
}
private void jCheckBox3_actionPerformed(ActionEvent e) {
this.jButton3.setEnabled(false);
}
private void jCheckBox2_actionPerformed(ActionEvent e) {
this.jButton3.setEnabled(false);
}
}
package client;
import javax.swing.JLabel;
public class Matriz {
private Imagenes imagenes = new Imagenes();
private EvaluarExpresion ee = new EvaluarExpresion();
private String[][] s = new String[7][7];
private JLabel[][]jb = new JLabel[7][7];
private GenerarSimbolo g = new GenerarSimbolo();
public Matriz(JLabel[][] jb){
for(int x=0;x<7;x++){
for(int y=0;y<7;y++){
s[x][y]="";
}
}
this.jb=jb;
}
public void borrarParaPublicar(boolean op1, boolean op2){
if(op1==false){
for(int x=0;x<7;x=x+1){
// jb[6][x].setText("");
jb[x][6].setText("");
}
}
if(op2==false) {
for(int x=0;x<5;x=x+1){
for(int y=0;y<5;y=y+2){
String letra = g.enteroALetra(s[x][y]);
jb[x][y].setText(letra);
}
}
}
}
private int valorX = 0;
private int valorY = 0;
public void setS(boolean op1, boolean op2){
int u=0;
if(op2==true){
valorX= Integer.parseInt(g.s(1));
valorY= Integer.parseInt(g.s(1));
u=4; //selecciona "123456789xy"
}else{
u=1; //selecciona "123456789"
}
int o = 2; //selecciona "+-*/"
if(op1==false) {
o=3; //selecciona "+-"
}
s[0][0]=g.s(u); s[0][1]=g.s(o);s[0][2]=g.s(u);s[0][3]=g.s(o);s[0][4]=g.s(u);s[0][5]="=";s[0][6]="0";
s[1][0]=g.s(u); s[1][1]=g.s(o);s[1][2]=g.s(u);s[1][3]=g.s(o);s[1][4]=g.s(u);s[1][5]="=";s[1][6]="0";
s[2][0]=g.s(u); s[2][1]=g.s(o);s[2][2]=g.s(u);s[2][3]=g.s(o);s[2][4]=g.s(u);s[2][5]="=";s[2][6]="0";
s[3][0]=g.s(u); s[3][1]=g.s(o);s[3][2]=g.s(u);s[3][3]=g.s(o);s[3][4]=g.s(u);s[3][5]="=";s[3][6]="0";
s[4][0]=g.s(u); s[4][1]=g.s(o);s[4][2]=g.s(u);s[4][3]=g.s(o);s[4][4]=g.s(u);s[4][5]="=";s[4][6]="0";
s[5][0]= ""; s[5][1]= "";s[5][2]= "";s[5][3]= "";s[5][4]= "";s[5][5]="=";s[5][6]= "";
s[6][0]= "0"; s[6][1]= "";s[6][2]= "0";s[6][3]= "";s[6][4]= "0";s[6][5]= "";s[6][6]="0";
jb[5][0].setIcon(imagenes.getIcon());
jb[5][2].setIcon(imagenes.getIcon());
jb[5][4].setIcon(imagenes.getIcon());
jb[5][1].setVisible(false);
jb[6][1].setVisible(false);
jb[5][3].setVisible(false);
jb[6][3].setVisible(false);
jb[6][5].setVisible(false);
jb[5][6].setVisible(false);
s[0][6]=ee.getResultado(s[0][0]+s[0][1]+s[0][2]+s[0][3]+s[0][4], valorX, valorY);
s[1][6]=ee.getResultado(s[1][0]+s[1][1]+s[1][2]+s[1][3]+s[1][4], valorX, valorY);
s[2][6]=ee.getResultado(s[2][0]+s[2][1]+s[2][2]+s[2][3]+s[2][4], valorX, valorY);
s[3][6]=ee.getResultado(s[3][0]+s[3][1]+s[3][2]+s[3][3]+s[3][4], valorX, valorY);
s[4][6]=ee.getResultado(s[4][0]+s[4][1]+s[4][2]+s[4][3]+s[4][4], valorX, valorY);
s[6][0]=ee.getResultado(s[0][0]+"+"+s[1][0]+"+"+s[2][0]+"+"+s[3][0]+"+"+s[4][0], valorX, valorY);
s[6][2]=ee.getResultado(s[0][2]+"+"+s[1][2]+"+"+s[2][2]+"+"+s[3][2]+"+"+s[4][2], valorX, valorY);
s[6][4]=ee.getResultado(s[0][4]+"+"+s[1][4]+"+"+s[2][4]+"+"+s[3][4]+"+"+s[4][4], valorX, valorY);
s[6][6]=ee.getResultado(s[0][0]+s[1][1]+s[2][2]+s[3][3]+s[4][4], valorX, valorY);
for(int x=0;x<7;x++){
for(int y=0;y<7;y++){
jb[x][y].setText(s[x][y].toString());
}
}
}
public int getValorX() {
return valorX;
}
public int getValorY() {
return valorY;
}
}
package client;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.SpinnerListModel;
import javax.swing.SpinnerModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class Configurar extends JDialog {
private String vs[] =
{"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"};
private DefaultListModel dlm = new DefaultListModel();
private SpinnerModel sm = new SpinnerListModel(vs);
public JLabel jLabel1 = new JLabel();
public JPanel jPanel1 = new JPanel();
private JButton jButton1 = new JButton();
private JButton jButton2 = new JButton();
private JButton jButton3 = new JButton();
private JList jList1 = new JList(dlm);
private JSpinner jSpinner1 = new JSpinner(sm);
private JScrollPane jScrollPane1 = new JScrollPane();
private JButton jButton4 = new JButton();
private JButton jButton5 = new JButton();
private int aplicar = 0;
public Configurar() {
super();
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout(null);
this.setSize(new Dimension(466, 370));
this.setTitle("Configurar");
this.setResizable(false);
this.setModal(true);
jLabel1.setText("jLabel1");
jLabel1.setBounds(new Rectangle(10, 40, 215, 110));
jPanel1.setBounds(new Rectangle(220, 85, 235, 195));
jPanel1.setLayout(null);
jButton1.setText("Color de fondo");
jButton1.setBounds(new Rectangle(15, 5, 210, 40));
jButton1.setToolTipText("Establece un color de fondo para la ventana");
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
jButton2.setText("Color de fondo fuente");
jButton2.setBounds(new Rectangle(240, 5, 210, 40));
jButton2.setToolTipText("Establece un color de fondo para las fuentes");
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton2_actionPerformed(e);
}
});
jButton3.setText("Color fuente");
jButton3.setBounds(new Rectangle(5, 55, 135, 25));
jButton3.setToolTipText("Establece un color de fuente para los números ");
jButton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton3_actionPerformed(e);
}
});
jList1.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
jComboBox1_valueChanged(e);
}
});
jSpinner1.setBounds(new Rectangle(145, 55, 70, 25));
jSpinner1.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
jSpinner1_stateChanged(e);
}
});
jScrollPane1.setBounds(new Rectangle(5, 85, 210, 255));
jButton4.setText("Aplicar");
jButton4.setBounds(new Rectangle(220, 300, 115, 40));
jButton4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton4_actionPerformed(e);
}
});
jButton5.setText("Salir");
jButton5.setBounds(new Rectangle(340, 300, 115, 40));
jButton5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton5_actionPerformed(e);
}
});
jScrollPane1.getViewport().add(jList1, null);
this.getContentPane().add(jButton5, null);
this.getContentPane().add(jButton4, null);
this.getContentPane().add(jScrollPane1, null);
this.getContentPane().add(jSpinner1, null);
this.getContentPane().add(jButton3, null);
this.getContentPane().add(jButton2, null);
this.getContentPane().add(jButton1, null);
jPanel1.add(jLabel1, null);
this.getContentPane().add(jPanel1, null);
cargarFuentes();
this.jLabel1.setFont(new Font(dlm.getElementAt(0).toString(),
jLabel1.getFont().getStyle(),
jLabel1.getFont().getSize()));
int x = jLabel1.getFont().getSize();
this.jSpinner1.setValue(""+x);
jSpinner1.setToolTipText("Tamaño de la fuente");
jLabel1.setOpaque(true);
this.jList1.setSelectedIndex(0);
jList1.setToolTipText("Fuentes instaladas en el sistema operativo");
}
private void jButton1_actionPerformed(ActionEvent e) {
Color color = null; //new Color();
JColorChooser ventanaDeColores=new JColorChooser();
color=ventanaDeColores.showDialog(this, "Seleccione un Color", Color.gray);
if(!(color==null)) {
this.jPanel1.setBackground(color);
}
}
private void cargarFuentes(){
String fuentes[];
GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
fuentes= environment.getAvailableFontFamilyNames();
for(int con=0;con<fuentes.length;con++) {
this.dlm.addElement(fuentes[con]);
}
}
private void jButton2_actionPerformed(ActionEvent e) {
Color color = null; //new Color();
JColorChooser ventanaDeColores=new JColorChooser();
color=ventanaDeColores.showDialog(this, "Seleccione un Color", Color.gray);
if(!(color==null)) {
this.jLabel1.setBackground(color);
}
}
private void jSpinner1_stateChanged(ChangeEvent e) {
Font f = new Font(jLabel1.getFont().getName(),
jLabel1.getFont().getStyle(),
Integer.parseInt(jSpinner1.getValue().toString()));
this.jLabel1.setFont(f);
}
private void jComboBox1_valueChanged(ListSelectionEvent e) {
this.jLabel1.setText(dlm.getElementAt(jList1.getSelectedIndex()).toString());
this.jLabel1.setFont(new Font(dlm.getElementAt(jList1.getSelectedIndex()).toString(),
jLabel1.getFont().getStyle(),
jLabel1.getFont().getSize()));
}
private void jButton3_actionPerformed(ActionEvent e) {
Color color = null; //new Color();
JColorChooser ventanaDeColores=new JColorChooser();
color=ventanaDeColores.showDialog(this, "Seleccione un Color", Color.gray);
if(!(color==null)) {
this.jLabel1.setForeground(color);
}
}
private void jButton4_actionPerformed(ActionEvent e) {
aplicar=1;
this.setVisible(false);
}
private void jButton5_actionPerformed(ActionEvent e) {
this.setVisible(false);
}
public int getAplicar() {
return aplicar;
}
public void setAplicar(int aplicar) {
this.aplicar = aplicar;
}
}
package client;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.swing.JOptionPane;
public class EvaluarExpresion {
private ScriptEngineManager manager = new ScriptEngineManager();
private ScriptEngine engine = manager.getEngineByName("js");
private String resultado = null;
public EvaluarExpresion() {
super();
}
public String getResultado(String expresion, float x, float y) {
engine.put("x", x);
engine.put("y", y);
try {
resultado = engine.eval(expresion).toString();
resultado = String.format("%.2f", Float.valueOf(resultado)) ;
}catch(ScriptException e) {
String error = e.getMessage();
JOptionPane.showMessageDialog(null, "Error en expresión: " + expresion + " " + error);
resultado = null;
}catch(Exception e){
String error = e.getMessage();
JOptionPane.showMessageDialog(null, "Error genérico al evaluar expresión: " + error);
resultado = null;
}
return resultado;
}
}
package client;
import java.util.Random;
public class GenerarSimbolo {
private String simbolo = "";
private String simbolos = "ABCDEFGHI";
private String numeros = "123456789";
private String numerosXY = "123456789xxyy";
private String operador1 = "+-";
private String operador2 = "+-*/";
public GenerarSimbolo() {
super();
}
public String enteroALetra(String numero) {
String letra = "";
int x=Integer.parseInt(numero)-1;
letra = simbolos.substring(x, x+1);
return letra;
}
public String s(int tipo) {
Random rnd = new Random();
int x = 0;
simbolo="";
switch(tipo){
case 1: x=rnd.nextInt(numeros.length());
simbolo = numeros.substring(x, x+1);
break;
case 2: x=rnd.nextInt(operador2.length());
simbolo = operador2.substring(x, x+1);
break;
case 3: x=rnd.nextInt(operador1.length());
simbolo = operador1.substring(x, x+1);
break;
case 4: x=rnd.nextInt(numerosXY.length());
simbolo = numerosXY.substring(x, x+1);
break;
default:
}
return simbolo;
}
}
package client;
import java.awt.Image;
import javax.swing.Icon;
import javax.swing.ImageIcon;
public class Imagenes {
private ImageIcon image = new ImageIcon(getClass().getResource("sumatoria.png"));
public Imagenes() {
super();
}
public Image getImage() {
return image.getImage();
}
public Icon getIcon() {
return image;
}
}
Diagrama de clases del producto software generador de contenido para redes sociales
Descargar el desarrollo del producto software realizado en JDeveloper 11g de Oracle y el archivo ejecutable JAR del siguiente enlace: Descargar desarrollo
Para ejecutar los archivos JAR debe tener la Maquina Virtual Java instalada en su computadora. Para descargar Java: https://java.com
No hay comentarios.:
Publicar un comentario
Realiza un comentario, debes autenticar una cuenta Gmail, Yahoo, OpenID, etc.