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ú

Temas - sapito169

#1
les presento una herramienta para que puedan ver sus  documento word excel y ppt de office 2003 2007 desde adentro

en futuras entregas mejorare la herramienta para que pueda comparar archivos de office
y también hacer una super búsqueda en varios archivos de office

Código (java) [Seleccionar]

package office;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Set;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.w3c.dom.Node;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSSerializer;
import org.xml.sax.InputSource;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.layout.Background;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Stage;

import java.util.Collection;
import java.util.Collections;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.fxmisc.flowless.VirtualizedScrollPane;
import org.fxmisc.richtext.CodeArea;
import org.fxmisc.richtext.LineNumberFactory;
import org.fxmisc.richtext.model.StyleSpans;
import org.fxmisc.richtext.model.StyleSpansBuilder;

public class TreeViewExample extends Application {

Stage primaryStage;
BorderPane root;
Map<String, TreeItem> map;
Map<String, String> inmemory;
  CodeArea textArea = new    CodeArea();
  TextField label  = new TextField("File:");

private static final Pattern XML_TAG = Pattern.compile("(?<ELEMENT>(</?\\h*)(\\w+)([^<>]*)(\\h*/?>))"
+"|(?<COMMENT><!--[^<>]+-->)");

private static final Pattern ATTRIBUTES = Pattern.compile("(\\w+\\h*)(=)(\\h*\"[^\"]+\")");

private static final int GROUP_OPEN_BRACKET = 2;
private static final int GROUP_ELEMENT_NAME = 3;
private static final int GROUP_ATTRIBUTES_SECTION = 4;
private static final int GROUP_CLOSE_BRACKET = 5;
private static final int GROUP_ATTRIBUTE_NAME = 1;
private static final int GROUP_EQUAL_SYMBOL = 2;
private static final int GROUP_ATTRIBUTE_VALUE = 3;


public static void main(String[] args) {
Application.launch(args);

}

public void open(ActionEvent actionEvent) {
textArea.clear();
inmemory=new HashMap<String, String>();
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("selecione el excel");

fileChooser.getExtensionFilters().addAll(new ExtensionFilter("Excel", "*.xlsx"),
new ExtensionFilter("Doc", "*.docx"), new ExtensionFilter("Ppt", "*..pptx"));
File file = fileChooser.showOpenDialog(primaryStage);

if (file != null) {
label.setText(file.getAbsolutePath());
try (ZipFile zipFile = new ZipFile(file);) {

Enumeration<?> enu = zipFile.entries();
Set<String> nodes = new HashSet<>();
while (enu.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry) enu.nextElement();

InputStream inputStream= zipFile.getInputStream(zipEntry);



String name = zipEntry.getName();

inmemory.put(name+"/", convertToString(inputStream));
inputStream.close();
String[] split = name.split("/");



String node = "";
for (String current : split) {
node += current + "/";
nodes.add(node);
}

}
List<String> listnodes = new ArrayList<String>(nodes);

Collections.sort(listnodes, this::compare);

TreeItem rootItem = root(listnodes, file.getName());

TreeView treeView = new TreeView();
treeView.getSelectionModel().selectedItemProperty().addListener(this::selectedFile);
treeView.setRoot(rootItem);

treeView.setShowRoot(true);

root.setLeft(treeView);

} catch (Exception e) {
Alert alert = new Alert(AlertType.ERROR);
alert.setContentText(e.getMessage());
e.printStackTrace();
alert.showAndWait();
}

}

}

String convertToString(InputStream in){
   Scanner scanner = new Scanner(in);
   scanner.useDelimiter("\\A");

   boolean hasInput = scanner.hasNext();
   if (hasInput) {
       return scanner.next();
   } else {
       return null;
   }

}

void selectedFile(ObservableValue observable, Object oldValue,
           Object newValue){
       TreeItem<String> selectedItem = (TreeItem<String>) newValue;
        for(String current: map.keySet()) {
        if(map.get(current)==selectedItem) {
        String text=inmemory.get(current);
        if(text!=null) {
        textArea.replaceText(prettyFormat(text));
        }
        }
        }
}

public int compare(String o1, String o2) {
int result = (Integer.valueOf(o1.split("/").length)).compareTo(o2.split("/").length);
if (result == 0)
result = o1.compareTo(o2);
return result;
}

private TreeItem root(List<String> listnodes, String name) {

TreeItem rootItem = new TreeItem(name);

rootItem.setExpanded(true);
map = new LinkedHashMap<String, TreeItem>();
for (String current : listnodes) {
String[] split = current.substring(0, current.length() - 1).split("/");

map.put(current, new TreeItem(split[split.length - 1]));
}

for (String key : map.keySet()) {

if (key.split("/", -1).length == 2) {

rootItem.getChildren().add(map.get(key));

} else {

String currentName = map.get(key).getValue() + "";
String result = key.substring(0, key.lastIndexOf(currentName + "/"));

TreeItem parent = map.get(result);
parent.setExpanded(true);
parent.getChildren().add(map.get(key));

}

}

return rootItem;
}



public String prettyFormat(String xml) {

       try {
           final InputSource src = new InputSource(new StringReader(xml));
           final Node document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(src).getDocumentElement();
           final Boolean keepDeclaration = Boolean.valueOf(xml.startsWith("<?xml"));

       //May need this: System.setProperty(DOMImplementationRegistry.PROPERTY,"com.sun.org.apache.xerces.internal.dom.DOMImplementationSourceImpl");


           final DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance();
           final DOMImplementationLS impl = (DOMImplementationLS) registry.getDOMImplementation("LS");
           final LSSerializer writer = impl.createLSSerializer();

           writer.getDomConfig().setParameter("format-pretty-print", Boolean.TRUE); // Set this to true if the output needs to be beautified.
           writer.getDomConfig().setParameter("xml-declaration", keepDeclaration); // Set this to true if the declaration is needed to be outputted.

           return writer.writeToString(document);
       } catch (Exception e) {
           throw new RuntimeException(e);
       }
   }

@Override
public void start(Stage primaryStage) {  
label.setEditable(false);
label.setStyle("-fx-background-color:#ced1d6;");
textArea.setParagraphGraphicFactory(LineNumberFactory.get(textArea));
this.primaryStage = primaryStage;
Menu m = new Menu("Archivo");

MenuItem open = new MenuItem("Inspect");


open.setOnAction(this::open);
m.getItems().add(open);

MenuBar mb = new MenuBar();
mb.getMenus().add(m);

root = new BorderPane();

VBox head = new VBox();
head.getChildren().add(mb);
head.getChildren().add(label);
root.setTop(head);


textArea.setEditable(false);
textArea.textProperty().addListener((obs, oldText, newText) -> {
textArea.setStyleSpans(0, computeHighlighting(newText));
       });
root.setCenter(new VirtualizedScrollPane<>(textArea));

Scene scene = new Scene(root, 550, 250);
scene.getStylesheets().add(TreeViewExample.class.getResource("xml-highlighting.css").toExternalForm());
primaryStage.setTitle("OpenXml Comparator");
primaryStage.setScene(scene);
// primaryStage.setMaximized(true);

primaryStage.show();

}
private static StyleSpans<Collection<String>> computeHighlighting(String text) {
   
       Matcher matcher = XML_TAG.matcher(text);
       int lastKwEnd = 0;
       StyleSpansBuilder<Collection<String>> spansBuilder = new StyleSpansBuilder<>();
       while(matcher.find()) {
       
        spansBuilder.add(Collections.emptyList(), matcher.start() - lastKwEnd);
        if(matcher.group("COMMENT") != null) {
        spansBuilder.add(Collections.singleton("comment"), matcher.end() - matcher.start());
        }
        else {
        if(matcher.group("ELEMENT") != null) {
        String attributesText = matcher.group(GROUP_ATTRIBUTES_SECTION);
       
        spansBuilder.add(Collections.singleton("tagmark"), matcher.end(GROUP_OPEN_BRACKET) - matcher.start(GROUP_OPEN_BRACKET));
        spansBuilder.add(Collections.singleton("anytag"), matcher.end(GROUP_ELEMENT_NAME) - matcher.end(GROUP_OPEN_BRACKET));

        if(!attributesText.isEmpty()) {
       
        lastKwEnd = 0;
       
        Matcher amatcher = ATTRIBUTES.matcher(attributesText);
        while(amatcher.find()) {
        spansBuilder.add(Collections.emptyList(), amatcher.start() - lastKwEnd);
        spansBuilder.add(Collections.singleton("attribute"), amatcher.end(GROUP_ATTRIBUTE_NAME) - amatcher.start(GROUP_ATTRIBUTE_NAME));
        spansBuilder.add(Collections.singleton("tagmark"), amatcher.end(GROUP_EQUAL_SYMBOL) - amatcher.end(GROUP_ATTRIBUTE_NAME));
        spansBuilder.add(Collections.singleton("avalue"), amatcher.end(GROUP_ATTRIBUTE_VALUE) - amatcher.end(GROUP_EQUAL_SYMBOL));
        lastKwEnd = amatcher.end();
        }
        if(attributesText.length() > lastKwEnd)
        spansBuilder.add(Collections.emptyList(), attributesText.length() - lastKwEnd);
        }

        lastKwEnd = matcher.end(GROUP_ATTRIBUTES_SECTION);
       
        spansBuilder.add(Collections.singleton("tagmark"), matcher.end(GROUP_CLOSE_BRACKET) - lastKwEnd);
        }
        }
           lastKwEnd = matcher.end();
       }
       spansBuilder.add(Collections.emptyList(), text.length() - lastKwEnd);
       return spansBuilder.create();
   }
}


Código (visualfoxpro) [Seleccionar]
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tool</groupId>
<artifactId>office</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>org.fxmisc.richtext</groupId>
<artifactId>richtextfx</artifactId>
<version>0.10.6
   </version>
</dependency>
</dependencies>

</project>



Código (css) [Seleccionar]
.tagmark {
   -fx-fill: gray;
}
.anytag {
   -fx-fill: crimson;
}
.paren {
   -fx-fill: firebrick;
   -fx-font-weight: bold;
}
.attribute {
   -fx-fill: darkviolet;
}
.avalue {
   -fx-fill: black;
}

.comment {
-fx-fill: teal;
}

.red-text {
   -fx-font-color: red;
}
.red-green {
   -fx-font-color: blue;
}
.styleClassName {

       -fx-background-color:gray;

    }

#2
Java / contribucion ejemplo de eventbus
23 Diciembre 2020, 01:09 AM
pequeña contribución un ejemplo de un bus de eventos
para que puedas desacoplar tus aplicación  ::)
para que puedas comunicar entre varios formularios de tu aplicacion de escritorio javafx swing o lo que sea ::)

porfavor respondamen no me castiges con el latigo de tu indiferencia
no me rechazes como ella


ejemplo de uso


public class Main {
public static void main(String args[]) {
EventBus eventBus = new EventBus();
eventBus.chanel("/sistema/session/parametros").on(t -> System.out.println(t));
eventBus.chanel("/sistema/session/parametros").fire(new RegistraParametro("mi parametrito"));


}
}




public class RegistraParametro {

private String string;

public RegistraParametro(String string) {
this.string = string;

}

@Override
public String toString() {
return "RegistraParametro [string=" + string + "]";
}

}


el resto de clases son cortitas


import java.util.function.Function;

public interface Callbak { void apply(Object obj); }



import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.function.Consumer;
import java.util.function.Function;

public class Chanel {

private List<Callbak> events = new ArrayList<>();

public void fire(Object event) {
events.forEach(p -> p.apply(event));
}

public void on(Callbak event) {
events.add(event);
}

}




import java.util.HashMap;

public class EventBus {

private HashMap<String, Chanel> chanels = new HashMap<>();

public Chanel chanel(String string) {
return chanels.computeIfAbsent(string, p -> new Chanel());

}

}

#3
esta es una contribución pequeña

Cuando haces prueba a código que es asynchrono junit  muestra mensaje inesperado y te manda al demonio mostrándote el dedo del medio como cuando le dices a la panchita que quieres hacer cosas indecorosas con ella

Este es un código de ejemplo de como hacer una prueba unitaria a código que es asynchrono

Código (java) [Seleccionar]

package testingasync;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import static org.junit.Assert.*;

public class asyn_gretting_should_Test {

   private static interface Callback<T> {
       void call(T t);
   }

   private static class AssynGreating {

       public void sayHi(String name, Callback<String> callback) {
           new Thread(() -> callback.call("hi " + name)).start();
       }
   }

   @Test
   public void say_hi() throws InterruptedException {
       CountDownLatch countDownLatch = new CountDownLatch(1);
       StringBuilder stringBuilder = new StringBuilder();
       new AssynGreating().sayHi("luis", (name) -> {
           stringBuilder.append(name);
           countDownLatch.countDown();
       });
       countDownLatch.await(1, TimeUnit.SECONDS);
       assertEquals("hi luis", stringBuilder.toString());
   }
}



pro favor den una respuesta aunque sea troll pero no me rachasen y no me respondan
#4
hola para todos aquellos que se preguntan como crear su propio evaluador de expresiones del tipo 5*4 +3 -2 *(5) a qui les tengo un pequeño ejemplito en menos de 81 lineas y sin usar regex


Código (java) [Seleccionar]
package javaapplication17;

import java.util.HashMap;

public class Interpreter {

    private final HashMap<String, String> variables = new HashMap<>();

    public static void main(String[] args) {
         Interpreter interpreter = new Interpreter();
        //calculation
        for (String text : new String[]{
            "1",
            "12",
            "5^2",
            "12+13",
            "4+2-1",
            "(1)",
            "(4/2+1*2)",
            "(1+3)+(5+6-3+13)",
            "3*(4+2)",
            "3*4*(5+3)+16+2",
            "8*7+(4+3+6*(5+4))",}) {

            System.out.println("text= " + text + " " + interpreter.evalProgram(text));
        }
        //programing feature booleans
        System.out.println();
        System.out.println("booleans");
        System.out.println();
        for (String text : new String[]{
            "1<2",
            "2>3",
            "12>13",
            "12<14",
            "(5+1)<14",
            "14<(5+1)",
            "(1+2)-3<4*2",
            "true",
            "false",
            "false&true",
            "false&true",
            "false&true|true",
            "true&false|true",
            "1+2<3&4<2|false",
            "(1+2)*3-1<4|false&true|(3+1)<4"}) {
            Interpreter programEvaluetor = new Interpreter();
            final String evalBoolean = programEvaluetor.evalProgram(text);
            System.out.println(text + " = " + evalBoolean);
        }
        //simple scripts

        System.out.println();
        System.out.println("programs");
        System.out.println();
        for (String text : new String[]{
            "1",
            "3+2-1",
            "3+2-1\n1+2+1",
            "4*5\n5*3",
            "5*8\n4+2\n5+5+5",
            "a=3*4\na",
            "b=3*4\nb",
            "abc=3*4\nabc\ncde=2*5+1\ncde",
            "a=2\nb=3\nc=a+b\nc",
            "c=true\nc",}) {
            Interpreter programEvaluetor = new Interpreter();
            System.out.println("=======program================================");
            System.out.println(text);
            System.out.println("=======endprogram=============================");
            System.out.println("=======output program=========================");
            System.out.println(programEvaluetor.evalProgram(text));
            System.out.println("=======end output program=====================");
            System.out.println("");
            System.out.println("");
        }

        //conditionals programs
        System.out.println();
        System.out.println("conditionals programs");
        System.out.println();
        for (String text : new String[]{
            "1\nif(true){\n2\n}",
            "if(false){\n1\n}",
            "2\nif(true){\n1\n}",
            "2\nif(false){\n1\n}\n3",
            "1\nif(true){\n2\n}\n3",}) {
            Interpreter programEvaluetor = new Interpreter();
            System.out.println("=======program================================");
            System.out.println(text);
            System.out.println("=======endprogram=============================");
            System.out.println("=======output program=========================");
            System.out.println(programEvaluetor.evalProgram(text));
            System.out.println("=======end output program=====================");
            System.out.println("");
            System.out.println("");
        }
        //conditionals programs
    }

    private boolean evalCondition(String condition) {
        final String evalBoleanExpresion = evalBoleanExpresion(condition.substring(3, condition.length() - 2));
        return Boolean.parseBoolean(evalBoleanExpresion);
    }

    private String evalProgram(final String expresion) {
        String[] comands = expresion.split("\n");
        String result = "";
        boolean run = true;
        for (int i = 0; i < comands.length; i++) {
            String comand = comands[i];
            if (comand.startsWith("if")) {
                run = evalCondition(comand);
                continue;
            }

            if (comand.startsWith("}")) {
                run = true;
                continue;
            }

            if (run) {
                final String evalComand = evalComand(comand);
                if (!evalComand.isEmpty()) {
                    result += evalComand + "\n";
                }
            }

        }

        return result.isEmpty() ? "" : result.substring(0, result.length() - 1);
    }

    private String evalComand(String expresion) {
        String[] comandPart = expresion.split("=");
        String result = "";

        if (comandPart.length == 1) {
            String candidate = comandPart[0];
            if (candidate.equals("true") || candidate.equals("false")) {
                return eval(expresion);
            }
            if (candidate.chars().allMatch(Character::isLetter)) {
                return "" + variables.get(candidate);
            }
            return eval(expresion);
        }
        if (comandPart.length == 2) {
            variables.put(comandPart[0], (eval(comandPart[1])));

            return "";
        }

        return result;
    }

    private String eval(String inputString) {

        String buffer = "";
        int beginIndex = -1;

        for (int i = 0; i < inputString.length(); i++) {
            final char character = inputString.charAt(i);
            if (character == '(') {
                beginIndex = i;
                buffer = "";
                buffer += character;
            }
            if (!buffer.isEmpty()) {
                String charLetter = (character + "");
                buffer += charLetter.equals("(") || charLetter.equals(")") ? "" : charLetter;
            }
            if (character == ')') {

                buffer += character;
                inputString = inputString.substring(0, beginIndex) + evalParentesis(buffer) + inputString.substring(beginIndex + buffer.length());
                i = 0;
                buffer = "";

            }
        }

        return "" + evalExpresion(inputString);
    }

    private String evalParentesis(String coeficientString) {

        return evalExpresion(coeficientString.substring(1, coeficientString.length() - 1));
    }

    private String evalExpresion(String expresion) {
        String result = "";
        if (expresion.contains("<")
                || expresion.contains(">")
                || expresion.contains("&")
                || expresion.contains("|")
                || expresion.contains("true")
                || expresion.contains("false")) {
            result = evalBoleanExpresion(expresion);
        } else {
            result = evalAddExpresion(expresion) + "";
        }

        return result;
    }

    private int evalAddExpresion(String expresion) {
        char[] characters = expresion.toCharArray();
        String buffer = "";
        int result = 0;
        for (int i = 0; i < expresion.length(); i++) {
            char character = expresion.charAt(i);
            buffer += character;
            if (i == characters.length - 1
                    || characters[i + 1] == '+'
                    || characters[i + 1] == '-') {

                if (buffer.startsWith("-")) {
                    result -= evalSub(buffer.replace("-", ""));
                } else {
                    result += evalSub(buffer.replace("+", ""));
                }
                buffer = "";
            }

        }

        return result;
    }

    private int evalSub(final String expresion) {
        char[] characters = expresion.toCharArray();
        String buffer = "";
        int result = 1;
        for (int i = 0; i < expresion.length(); i++) {
            char character = expresion.charAt(i);
            buffer += character;
            if (i == characters.length - 1
                    || characters[i + 1] == '*'
                    || characters[i + 1] == '/') {

                if (buffer.startsWith("/")) {
                    result /= evalExpo(buffer.replace("/", ""));
                } else {
                    result *= evalExpo(buffer.replace("*", ""));
                }
                buffer = "";
            }

        }

        return result;
    }

    private int evalExpo(final String expresion) {
        char[] characters = expresion.toCharArray();
        String buffer = "";
        int result = 1;
        for (int i = expresion.length() - 1; i >= 0; i--) {
            char character = expresion.charAt(i);
            buffer = character + buffer;
            if (i == 0 || characters[i - 1] == '^') {
                result = (int) (Math.pow(Integer.parseInt(evalElement(buffer.replace("^", ""))), (result)));
                buffer = "";
            }

        }
        return result;
    }

    private String evalElement(String expresion) {

        if (expresion.chars().allMatch(Character::isLetter)) {
            return variables.get(expresion);
        } else {
            return expresion;
        }

    }

    private String evalBoleanExpresion(String expresion) {
        char[] characters = expresion.toCharArray();
        String buffer = "";
        boolean result = true;
        for (int i = 0; i < expresion.length(); i++) {
            char character = expresion.charAt(i);
            buffer += character;
            if (i == characters.length - 1
                    || characters[i + 1] == '&'
                    || characters[i + 1] == '|') {

                if (buffer.startsWith("&")) {
                    result &= Boolean.parseBoolean(evalBooleanElement(buffer.replace("&", "")));
                } else if (buffer.startsWith("|")) {
                    result |= Boolean.parseBoolean(evalBooleanElement(buffer.replace("|", "")));
                } else {
                    result = Boolean.parseBoolean(evalBooleanElement(buffer));
                }
                buffer = "";
            }

        }

        return result + "";
    }

    private String evalBooleanElement(final String expresion) {
        String result = "";
        if (expresion.contains("<") || expresion.contains(">")) {

            String[] split = expresion.split("<|>");
            String left = evalExpresion(split[0]);
            String right = evalExpresion(split[1]);

            if (expresion.contains("<")) {
                result = "" + (Integer.parseInt(left) < Integer.parseInt(right));

            }
            if (expresion.contains(">")) {
                result = "" + (Integer.parseInt(left) > Integer.parseInt(right));
            }
        } else {
            result = expresion;
        }

        return result;
    }
}




en un futuro agregare la funcionalidad de de agregar variables funciones bucles y condicionales para que se paresca a javascript   ::)

porfavor cuentenme lo que quieran del post preguntas traumas amensas o respuesta troll pero no me ignoren por que soy una perra de atención


diganme si lo han usado y en que
#5
Java / Patrom mvp
7 Noviembre 2013, 02:25 AM
Patron mvp

Pobre tu que esta buscando en la página 10 de google tratando de buscar algún código ejemplo de como se usar el patrón mvp y solo encuentras las pagina de Martin Fowler que te parece demasiado complicada para que la entiendas (si la llegas a leer por que esta en ingles)
Te dedico estas palabras aburridas y académicas que por compromiso y por presunción innecesaria escribo para malograrte la vida y mostrar que se mucho mas que tu y que puede escribir mucho sin decir nada que valga la pena.
Si ya sé que solo quieres ver código que no te gusta leer así que te recomiendo que te saltes a la parte práctica donde se muestra el código y los diagramas de clases

Limitaciones del proyecto
Este proyecto no es por ningún motivo amplio ni toma en consideración todos los puntos que deben ser tomados en cuenta para desarrollar una aplicación digna de un profesional. Se pasaron por alto varios temas como el manejo de errores e hilos. Tampoco voy a decir que soy un experto en el patrón ni que lo he usado en varios proyectos así que no puedo dar consejos de como funciona el patrón en aplicaciones grandes ni los posibles errores que presente en ellos.

Que es el patrón mvp
El patrón de diseño mvp es un patrón para el desarrollo de interface de usuario que se caracteriza por trabajar con una clase y dos interfaces. La primera clase es llamada presentador que actúa como intermediario entre la vista (como interface) y el modelo (como interface).
Poniendo en palabras que cualquier programador entienda, El presentador es una clase concreta  y por el constructor le pasamos la vista y el modelo en forma de interfaces.
La comunicación entre la vista y el presentador se desarrolla mediante el uso del patrón observador. La comunicación entre el modelo y el presentador es también por el patrón observador pero es poco usual. Tranquilo vamos ha desarrollar un ejemplo practico para que los conceptos queden claro XD somos programadores y nos gusta el código


Deja de trabajar sin pensar lo que haces y toma en cuenta que cualquier patrón que uses tiene sus desventajas y que debes escoger siempre el que mas se amolde a tus necesidades nada es perfecto "no existen las balas de plata"

Que desventajas y limitaciones tiene
•   Requiere una gran cantidad de código que no vale la pena hacer en proyectos fáciles y simples
•   Requiere una inmensa cantidad de código para conectar los presentadores con sus vistas y sus modelos Requiere que crees interfaces para que puedas usar el patrón observador por cada acción (como presionar un botón)
•   Requiere que pienses en la vista en forma abstracta lo cual es difícil para los formularios muy grandes

Cuales son sus ventajas
•   La vista puede ser fácilmente cambiada
•   La vista puede ser trabajada incluso por una persona diferente
•   La vista y el modelo pueden cambiar y ser muy diferentes sin que eso afecte demasiado el sistema.
La verdad es que todo cambio en el modelo siempre obliga cambios en la vista y lo único que se logra con estar menos "desacoplado" es que sea mas fácil hacer cambio pero siempre va haber cambios. La única forma de cambiar el modelo sin malograr la vista es mediante el uso de frameworks que autogeneren la vista mediante reflexión

Cuando usarlo
Recomiendo que uses el patrón para migrar un sistema de escritorio legacy (prácticamente todos están en estado legacy no se hagan los locos) en el cual la vista allá pasado de moda y los usuario quiera algo mas sexy, mas cool, mas "empresarial". Me refiero a que se puede hacer poco a poco refactoring y cambiar a pedazos la vista  
Recomiendo también usarlo cuando se quiera hacer aplicaciones de escritorio en las cuales se quiera mantener varias vistas en simultaneo (swing , javafx, awt)

Cuales son sus variantes
•   No usar interface para el modelo
•   Ni tampoco tener un modelo para formularios simples
•   Considerar alas clases Servicio como modelo

Diagrama de clases del patrón



Aplicación practica
Vamos a mostrar un simple mantenimiento de personal usando swing y el patrón mvp
Diagrama de clases

En este caso decido no crear una interface para el modelo por que no le vi el sentido


Interface grafica



Fragmentos de código

Código (java) [Seleccionar]
public class PresentadorMantenimientoPersonal {

private final PanMantenimientoPersonal panMantenimientoPersonal;
private final ServicioPersonal servicioPersonas;

public PresentadorMantenimientoPersonal(
PanMantenimientoPersonal panMantenimientoPersonalM,
ServicioPersonal servicioPersonas) {
this.panMantenimientoPersonal = panMantenimientoPersonalM;
this.servicioPersonas = servicioPersonas;
}

public void run() {

panMantenimientoPersonal.addAgregoListener(new AgregoListener() {
@Override
public void fueAgregado() {
agrego();
}
});
panMantenimientoPersonal.addModificoListener(new ModificoListener() {
@Override
public void fueModificado() {
modificado();
}
});
panMantenimientoPersonal.addEliminadoListener(new EliminadoListener() {
@Override
public void fueEliminado() {
eliminado();
}
});
}

private void eliminado() {
Personal leeido = panMantenimientoPersonal.leerPersonal();
servicioPersonas.eliminar(leeido.getCodigo());
panMantenimientoPersonal.mostrar(servicioPersonas.lista());

}

private void modificado() {
Personal leeido = panMantenimientoPersonal.leerPersonal();
servicioPersonas.modifica(leeido);
panMantenimientoPersonal.mostrar(servicioPersonas.lista());

}

private void agrego() {
Personal leeido = panMantenimientoPersonal.leerPersonal();
servicioPersonas.agregar(leeido);
panMantenimientoPersonal.mostrar(servicioPersonas.lista());
}

}


Código (java) [Seleccionar]

import java.util.List;


public interface PanMantenimientoPersonal {

void addAgregoListener(AgregoListener agregoListener);

void addModificoListener(ModificoListener modificoListener);

void addEliminadoListener(EliminadoListener eliminadoListener);

Personal leerPersonal();

void mostrar(List<Personal> lista);

}


Código (java) [Seleccionar]

import java.awt.Container;

public class PanMantenimientoPersonalSwing extends JPanel implements
PanMantenimientoPersonal {
public PanMantenimientoPersonalSwing() {
setLayout(null);

JLabel lblNombre = new JLabel("codigo");
lblNombre.setBounds(10, 11, 56, 14);
add(lblNombre);

txtCodigo = new JTextField();
txtCodigo.setBounds(73, 8, 86, 20);
add(txtCodigo);
txtCodigo.setColumns(10);

JLabel label = new JLabel("Nombre");
label.setBounds(10, 39, 56, 14);
add(label);

txtNombre = new JTextField();
txtNombre.setColumns(10);
txtNombre.setBounds(73, 36, 86, 20);
add(txtNombre);

JLabel lblApellido = new JLabel("Apellido");
lblApellido.setBounds(10, 67, 56, 14);
add(lblApellido);

txtApellido = new JTextField();
txtApellido.setColumns(10);
txtApellido.setBounds(73, 64, 86, 20);
add(txtApellido);

JLabel lblEdad = new JLabel("Edad");
lblEdad.setBounds(10, 95, 56, 14);
add(lblEdad);

txtEdad = new JTextField();
txtEdad.setColumns(10);
txtEdad.setBounds(73, 92, 86, 20);
add(txtEdad);

JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 148, 419, 142);
add(scrollPane);

table = new JTable();
table.setModel(new DefaultTableModel(new Object[][] {}, new String[] {
"codigo", "nombre", "apellido", "edad", "sueldo" }));
scrollPane.setViewportView(table);

JLabel lblSueldo = new JLabel("sueldo");
lblSueldo.setBounds(10, 123, 56, 14);
add(lblSueldo);

txtSueldo = new JTextField();
txtSueldo.setColumns(10);
txtSueldo.setBounds(73, 120, 86, 20);
add(txtSueldo);

JButton btnAgrega = new JButton("agrega");
btnAgrega.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (AgregoListener agregoListener : listaAgregoListener) {
agregoListener.fueAgregado();
}
}
});
btnAgrega.setBounds(175, 7, 89, 23);
add(btnAgrega);

JButton btnModifica = new JButton("modifica");
btnModifica.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (ModificoListener modificoListener : listaModificoListener) {
modificoListener.fueModificado();
}
}
});
btnModifica.setBounds(175, 35, 89, 23);
add(btnModifica);

JButton btnElimina = new JButton("elimina");
btnElimina.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (EliminadoListener eliminadoListener : listaEliminadoListener) {
eliminadoListener.fueEliminado();
}
}
});
btnElimina.setBounds(175, 63, 89, 23);
add(btnElimina);
}

private List<AgregoListener> listaAgregoListener = new ArrayList<>();
private List<ModificoListener> listaModificoListener = new ArrayList<>();
private List<EliminadoListener> listaEliminadoListener = new ArrayList<>();
private JTextField txtCodigo;
private JTextField txtNombre;
private JTextField txtApellido;
private JTextField txtEdad;
private JTable table;
private JTextField txtSueldo;

@Override
public void addAgregoListener(AgregoListener agregoListener) {
listaAgregoListener.add(agregoListener);
}

@Override
public void addModificoListener(ModificoListener modificoListener) {
listaModificoListener.add(modificoListener);
}

@Override
public void addEliminadoListener(EliminadoListener eliminadoListener) {
listaEliminadoListener.add(eliminadoListener);
}

@Override
public Personal leerPersonal() {
int codigo = Integer.parseInt(txtCodigo.getText());
String nombre = txtNombre.getText();
String apellido = txtApellido.getText();
double sueldo = Double.parseDouble(txtSueldo.getText());
int edad = Integer.parseInt(txtEdad.getText());
return new Personal(codigo, nombre, apellido, sueldo, edad);
}

@Override
public void mostrar(List<Personal> lista) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setRowCount(0);
for (Personal personal : lista)
model.addRow(aFila(personal));

}

private Vector<Object> aFila(Personal personal) {
Vector<Object> result = new Vector<>();
result.add(personal.getCodigo());
result.add(personal.getNombre());
result.add(personal.getApellido());
result.add(personal.getSueldo());
result.add(personal.getEdad());

return result;
}
}



Código (java) [Seleccionar]


import java.awt.BorderLayout;

import javax.swing.JFrame;

public class Main {
public static void main(String[] args) {
PanMantenimientoPersonalSwing panMantenimientoPersonal = new PanMantenimientoPersonalSwing();
new PresentadorMantenimientoPersonal(panMantenimientoPersonal//
, new ServicioPersonal())//
.run();

JFrame jFrame = new JFrame();
jFrame.setSize(500, 400);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setLocationRelativeTo(null);
jFrame.setLayout(new BorderLayout());
jFrame.getContentPane().add(panMantenimientoPersonal,
BorderLayout.CENTER);
jFrame.setVisible(true);
}
}


Aprendizaje y evolución
En el desarrollo se puede apreciar que el manejo de eventos no puede ser mas simple son solamente varios ArrayList que guardan varios eventos
Supongamos por ejemplo que un día el jefecito se le ocurrió que la vista esta fea y que le gustaría cambiar a javafx bueno pues simplemente cambiaríamos el main de esta manera

Código (java) [Seleccionar]
PanMantenimientoPersonalJfx panMantenimientoPersonal = new PanMantenimientoPersonalJfx ();
new PresentadorMantenimientoPersonal(panMantenimientoPersonal//
, new ServicioPersonal())//
.run();
mostrarEnVentana(panMantenimientoPersonal) ;


Solo crearíamos la vista imprentaríamos los métodos de la interface PanMantenimientoPersonal pero todo el resto de la aplicación no tendría que cambiar
Para los haraganes como descargar y usar el código

Por favor necesito que me ataquen
Traumas, críticas (destructivas), trolleos, venganzas, asuntos personales, propuestas indecentes, amenazas y tal vez preguntas son bienvenidas
#6
este código es genial y se ve muy bien me permite crear gráficos estadísticos en tiempo real es muy util para hacer monitoreos

porfavor respondan aunquesea para insultar pero no me ignoren

Código (java) [Seleccionar]


import java.awt.BorderLayout;


import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.time.Second;
import org.jfree.data.time.DynamicTimeSeriesCollection;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Time;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class FormularioPrincipal extends JFrame {

public FormularioPrincipal() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
add(new PanelGraphicaEnTiempoReal());
}

public static void main(String[] args) {
FormularioPrincipal frmPrincipal = new FormularioPrincipal();
frmPrincipal.setVisible(true);
}

private static class PanelGraphicaEnTiempoReal extends JPanel implements ActionListener {

private DynamicTimeSeriesCollection contenidoSerieDinamica;
private JFreeChart graphicaDeTiempo;
private Timer cronometro;
private Random generadorDeAleatorios;

private int segundo;
private int minuto;
private int hora;
private int dia;
private int mes;
private int año;
private int indiceSerie;
private String nombreDeLaSerie;



public PanelGraphicaEnTiempoReal() {

generadorDeAleatorios=new Random();
cronometro=new Timer(200,this);


contenidoSerieDinamica = new DynamicTimeSeriesCollection(
getCantidadDeSeries(),
getCantidadPorSerie(),
enSegundos());//crea el contenido de la serie dinamica

contenidoSerieDinamica.setTimeBase(new Second(segundo=0,minuto=0,hora=0,dia=1,mes=1,año=2013));//pone el primer instante
contenidoSerieDinamica.addSeries(valoresDeLaSerie(), indiceSerie=0,nombreDeLaSerie="ventas");//agrega una serie

graphicaDeTiempo = ChartFactory.createTimeSeriesChart(
getTitulo(),
getEtiquetaDelasX(),
getEtiquetaDelasY(),
contenidoSerieDinamica,
tieneLeyenda(),
tienToolTip(),
tineUrl());//crea una grafica de tiempo

ChartPanel panelDeLaGraphica = new ChartPanel(graphicaDeTiempo);//crea un panel para graficas


add(panelDeLaGraphica);

cronometro.start();
}

private float[] valoresDeLaSerie() {
float[] respuesta = new float[getCantidadPorSerie()];
Random creadorDeAleatorios = new Random();
for (int i = 0; i < respuesta.length; i++) {
respuesta[i]=creadorDeAleatorios.nextFloat();//crea un aleatorio;
}
return respuesta;
}

@Override
public void actionPerformed(ActionEvent e) {
contenidoSerieDinamica.advanceTime();//avansa el tiempo
contenidoSerieDinamica.appendData(new float[]{generadorDeAleatorios.nextFloat()});//agrega un aleatorio
}

private boolean tineUrl() {
return false;
}

private boolean tienToolTip() {
return true;
}

private boolean tieneLeyenda() {
return true;
}

private String getEtiquetaDelasY() {

return "ventas";
}

private String getEtiquetaDelasX() {
return "hh:mm:ss";
}

public String getTitulo() {

return "ventas";
}

private Second enSegundos() {
return new Second();
}

public int getCantidadPorSerie() {

return 120;
}

public int getCantidadDeSeries() {
return 1;
}


}

}
#7
Java / como crear formularios
11 Diciembre 2011, 03:20 AM
Esta vez voy hablar con evidencias
Veamos como un desarrollador normal creando un formulario


Código (java) [Seleccionar]


package com.ejemplo;

public class PanFeoContacto extends javax.swing.JPanel {

    public PanFeoContacto() {
        initComponents();
    }

   
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        jTextField3 = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        jSpinner1 = new javax.swing.JSpinner();

        jLabel1.setText("Nombre");

        jLabel2.setText("Apellido");

        jLabel3.setText("Direcion");

        jLabel4.setText("Edad");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 460, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 460, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel3)
                            .addComponent(jLabel4))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jSpinner1, javax.swing.GroupLayout.DEFAULT_SIZE, 459, Short.MAX_VALUE)
                            .addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 459, Short.MAX_VALUE))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(191, Short.MAX_VALUE))
        );
    }// </editor-fold>                       


    // Variables declaration - do not modify                     
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JSpinner jSpinner1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextField3;
    // End of variables declaration                   

}



todo el código es incomprensible inmantenible difícil de entender de modificar es mas el ide no te permite editar casi la totalidad de código
es mas para modificarlo tienes que usar una serie de pasos en el ide eso de precodigo postcodigo solo funciona con netbeans y require un horrible xml de ayuda que te lo crea el ide solo funciono en netbeans
estorba si usas eclipse y esto solo es un ejemplo trivial la realidad es que me vi en la desgracia de usar formulario 10 veces más complicados con 10 veces de código con más de 50 componentes con paneles dentro de otro y con diferentes layauts y enzima al estilo wizard para que quepa en la pantalla casi me dieron ganas de renunciar al ver que cada vez que modifica un componente todo se desarmaba desaparecían paneles enteros y solo funcionaba con la paleta
Solo pensar en hacerle refactoring es ciencia ficion


Bueno pues ágamos lo a mano solo usando swing


Código (java) [Seleccionar]

package com.ejemplo;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;


public class PanelContacto {

    private final JPanel panel = new JPanel();
   

    public PanelContacto() {
        Insets insets = new Insets(5, 5, 5, 5);
        panel.setLayout(new GridBagLayout());
        panel.add(new JLabel("Nombre"), new GridBagConstraints(0, 1, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, insets, 0, 0));
        panel.add(new JTextField(), new GridBagConstraints(1, 1, 1, 1, 1, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, insets, 0, 0));
        panel.add(new JLabel("Apellido"), new GridBagConstraints(0, 2, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, insets, 0, 0));
        panel.add(new JTextField(), new GridBagConstraints(1, 2, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, insets, 0, 0));
        panel.add(new JLabel("Direcion"), new GridBagConstraints(0, 3, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, insets, 0, 0));
        panel.add(new JTextField(), new GridBagConstraints(1, 3, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, insets, 0, 0));
        panel.add(new JLabel("Edad"), new GridBagConstraints(0, 4, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, insets, 0, 0));
        panel.add(new JSpinner(new SpinnerNumberModel(1, 1, 100, 1)), new GridBagConstraints(1, 4, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, insets, 0, 0));

    }

    public Container getPanel() {
        JPanel respuesta = new JPanel();
        respuesta.setLayout(new BorderLayout());
        respuesta.add(panel, BorderLayout.NORTH);
        return respuesta;
    }
}



Es feo pero es 100 veces mejor que la opción anterior además requiere algunos hacks(los layauts de swing son malos)


Luego de hacer refactoring y usar el patrón de diseño builder + interface fluida

Código (java) [Seleccionar]

package com.ejemplo;


import java.awt.Container;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;

public class PanelConPatronBuilder {

    public PanelConPatronBuilder() {
    }

    public Container getPanel() {

        return new PanelBuilder().agregaFila("Nombre", new JTextField()).
                agregaFila("Apellido", new JTextField()).
                agregaFila("Direcion", new JTextField()).
                agregaFila("Edad", new JSpinner(new SpinnerNumberModel(1, 1, 100, 1))).getPanel();
    }
}




U eso es genial mira el código habla por sí solo pero requiera ayuda de una clase echa en casa que tendrías que mantener y crear en caso de que la pierdas 

Aquí está la clase


Código (java) [Seleccionar]

package com.ejemplo;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class PanelBuilder {

    private final Container panel=new JPanel();
    private final Insets insets = new Insets(5, 5, 5, 5);
    int cont = -1;

    public PanelBuilder() {
       
        panel.setLayout(new GridBagLayout());
    }

   
   
   
    public PanelBuilder agregaFila(String nombre,JComponent jTextField) {
        panel.add(new JLabel(nombre), restricionDeEtiqueta(++cont));
        panel.add(jTextField, restricionComponente(cont));
        return  this;
    }

    private GridBagConstraints restricionComponente(int cont) {
        return new GridBagConstraints(1, cont, 1, 1, 1, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, insets, 0, 0);
    }

    private GridBagConstraints restricionDeEtiqueta(int cont) {
        return new GridBagConstraints(0, cont, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, insets, 0, 0);
    }

    public Container getPanel() {
        JPanel respuesta = new JPanel();
        respuesta.setLayout(new BorderLayout());
        respuesta.add(panel, BorderLayout.NORTH);
        return respuesta;
    }
}



Ahora si es enserio usando la ayuda de un librería externa bien echa

package com.ejemplo;

import java.awt.Container;
import org.metawidget.swing.SwingMetawidget;
Código (java) [Seleccionar]

public class PanelContactoMetaWidtget {

    public Container getPanel() {
        SwingMetawidget swingMetawidget =new SwingMetawidget();
        swingMetawidget.setToInspect(new Contacto());
        return swingMetawidget;
    }
}


Y requiere un pojo de toda la vida
package com.ejemplo;

Código (java) [Seleccionar]

public class Contacto {

    private String nombre;
    private String apellido;
    private String direcion;
    private int edad;

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public String getDirecion() {
        return direcion;
    }


public void setDirecion(String direcion) {
        this.direcion = direcion;
    }

    public int getEdad() {
        return edad;
    }

    public void setEdad(int edad) {
        this.edad = edad;

    }
}

y esta librería te obliga a programar orientado a objetos lo cual es bueno porque en un proyecto grande igual tendrías todo partido en varias clases pongámonos esta clase librería te pide que crees la clase contacto que es un pojo que lo arias de toda maneras en caso de que el contacto cambie automáticamente la vista se actualizaría
Digamos que tienes 100 paneles de contacto en caso de que cambie el contacto solo modificarías la clase contacto


metawidget http://metawidget.org/
builder http://architects.dzone.com/news/factories-builders-and-fluent-






#8
Siempre que alguien me pide ayuda en lo que se refiere a programación me quedo asi  :-X  :rolleyes:  :(
veo el código y es imposible de entender y cuando digo que es difícil de entender digo que es casi imposible es en ese momento que sierro mi boca para no hacerle recordar a todo su familia por la frustración que me producen al tratar de entender lo que hacen una vez que les entiendo viene la parte mas difícil no es que quiera hablar de mi pensamiento filosófico ni dármela de genio ni nada tengo que aplicar algunas técnicas razonables casi científicas creo que la única forma de entender un problema y solucionarlo es cuestión de una abstracción y usar mi cerebro en forma lo mas razonablemente posible usar todo lo que me enseñaron en el colegio con lo que se refiere a la lógica, el método científico, el análisis es decir que es bueno desempolvar el hemisferio izquierdo
Luego me pongo a ver trato de dividir el problema en pequeñas partes independientes que se pueden probar en independientemente y comprobar pedacito por pedacito si esta bien trato de ver los síntomas pero o sorpresa eso es casi imposible

Miro el código y todo esta acoplado no puedo asegurarme de que una clase esta correcta porque ni siquiera se bajo que posible valores la clase murió

"•$"$"•$"•$  >:( está demasiado acoplado
No puedo hacer absolutamente nada a menos que configure 3 ficheros properties 5 xml levantar un servidor web levantar una base de datos levantar un servidor ldap configurar el path de quien sabe qué y además el código solo funciona en linux por que se le ocurrió que ejecuta programas por la consola dependiente de linux con lo mucho que odio linux yo soy gek soy informático pero no lo suficiente gek para usar linux (que comience el flame)
Luego de levantar el servidor en la nube requerido para que corra el programa me doy cuenta de que si toco cualquier cosa el sistema explota y solo termino empeorando todo por tratar de "arreglarlo" "•$"•$•$%&& todo depende de todo que si hago un cambio en una clase se apaga la luz del vecino y se prende mi televisor nadie sabe porque   :xD algunas veces me pregunto parase que usa magia negra nadie sabe cómo funciona
lo peor de todo es que el programa ni siquiera me avisa que fallo (la mayoría de bese miserablemente) y tengo que hacer una secuencia larga de pasos en el gui para reproducir el error y luego hacer otra serie de pasos largos para comprobar que hubo un error



#9
hola foreros
estoy tratando de obtener información de una pagina vulnerable(no me gusta hacer maldades solo es un interés académico)
bien reconocí que la pagina es vulnerable por que al ponerle en el url

xxxxxxx.php?id=' me voto de resultado

CitarYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\\\' AND active = 'T'' at line 1

con lo cual ya se que es mysql con php y ademas me pasa un pedaso del query y que es vulnerable

luego al tratar de averiguar cuantas columnas vota la consulta puse

xxxxxxx.php?id=4 order by 10/*

me voto error pero con 9 no con lo que averigüe que tiene 9 columnas

acá viene lo extraño cuando trato de sacar mas información usando union

xxxxxxx.php?id=4 union all select 1,2,3,4,5,6,7,8,9/*

me vota esta respuesta contradictoria
Citar
The used SELECT statements have a different number of columns


#10
Java / ide para beans biding
24 Julio 2009, 05:24 AM
alguien conoce algun ide que me perimita trabajar con beans biding que no me cancelel el codigo
o alguien sabe si existe un plugin para eclipse para usar beans biding
#11
evitando que sea demasiado grande


package com.luchitowork.graficos;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.Container;

import javax.swing.UIManager;

public class Proseos_graficos{

    public static void Centrate(Container frame){
        Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize=frame.getSize();
        if(frameSize.height>screenSize.height){
            frameSize.height=screenSize.height;
        }
        if(frameSize.width>screenSize.width){
            frameSize.width=screenSize.width;
        }
        frame.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);
    }
    public static void tamañoenprocentaje(Container frame, Double poraltura,Double porancho){
        //poner el alto y el ancho en porcentaje de la ventana
         poraltura=poraltura/100;
         porancho=porancho/100;
         frame.setSize((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()*porancho),(int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()*poraltura));
    }
   
}



centrando ventana

this.setLocationRelativeTo(null);

maximisando Ventana

this.setExtendedState(JFrame.MAXIMIZED_BOTH);
#12
Java / conexion cerrada?
22 Abril 2009, 07:57 AM


        Connection con = null;
        try {
            //FactoriTableModel fac=new FactoriTableModel();
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con = DriverManager.getConnection("jdbc:odbc:dsnDBLE", "ELIO", "");
            ResultSet rs = con.prepareCall("listProducts").executeQuery();
            while (rs.next()) {
                System.out.print(con.isClosed()+"\n");
                System.out.print(rs.getString(1)+"\n");
            }
            //jTable1.setModel(fac.getTableModel(con,"listProducts"));
        } catch (ClassNotFoundException f) {
            f.getMessage();
        } catch (SQLException f) {
            f.getMessage();
        }



esto me imprime
Citar
false
Beverages
false
Beverages
false
Condiments
false
Condiments
false
Condiments
..
..........


como me puede explicar como es posible que haga una consulta con la conexion serrada
#13
bueno como dice el titulo  cual es la diferencia entre ellos
#14
Java / tag en java
17 Marzo 2009, 17:27 PM
alguien sabe si existe algun equivalente en java del metodo tag que tienen todos los conponentes graficos en .net
#15
Java / error prepare statement
23 Febrero 2009, 06:12 AM


estoy provando sobre el evento keyRealesed de una caja de texto esto


            try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                Connection cn;

                cn =
        DriverManager.getConnection("jdbc:sqlserver://localhost:1036;databasename=nwind",
                                 "sa", "");
                PreparedStatement st = cn.prepareStatement("sps_productos '?'");
                st.setString(1,txt.getText());
            } catch (ClassNotFoundException f) {
                JOptionPane.showMessageDialog(null,
                                              "Clase no encontrada descripciom:\n" +
                                              f.getMessage());
            } catch (SQLException f) {
                JOptionPane.showMessageDialog(null,
                                              "error sql descipcion:\n" + f.getMessage());
                                              System.out.print(f.getMessage());
            }


y me sale este error

CitarEl índice 1 está fuera de intervalo

es una bd sqlserverexpress se conecta sin problemas uso java 6 en win xp
#16
Java / [MOD] aplicaciones "reales"
29 Enero 2009, 06:18 AM
bueno ya estaba harto de resolver todos los malditos problemas  >:( que le pueden hacer a un nobato (calcular primos, intereses, cambios de vase, ecuanciones calendarios ) y ni ablar cuando el profe ablava de herencia y objetos e interfaces  :laugh: :laugh: ya me los sabia todos.

asta que porfin llego el gloriso dia el dia mas felis de mi vidia justo despues de aprender bd y los primeros diagramas de uml cuando el profe nos dio una parte de una enpresa para que desarrollaramos un programa  :)

asi que porfin podria programar algo que sirva  :xD :xD y bueno nos dio para hacer un programa que sirva para las ventas de un restaurante. ya tenos los casos de usos y acatividades

bueno el motivo del post es que me digan como se deve hacer bien un programa real y los libros o paginas que deberia leer antes de enpesar

los programas van a ser uno echo en .net con mssqlserver 2005 con 50 tablas(el profe solo dijo eso para fregar)
el otro en msqlserver 2005 con java y 5 tablas
#17
.NET (C#, VB.NET, ASP) / pagina de .net
27 Enero 2009, 00:35 AM
alguien conoce alguna pagina de .net donde me muestre algo parasido al api de java
es decir

que me muestre el nombre de la clase una descripcion todos sus metodos que valores recive y que valores vota  junto con su descripcion del metodo

#18
disculpen que haga una pregunta tan tonta pero es que me estoy iniciando en .net
bueno la pergunta es como hago para poner un String de 2 lineas

asi lo asia en java

String str ="asdasd\n"

#19
Java / JTable pintar en celldas
15 Enero 2009, 00:32 AM
alguien sabe como mostrar dentros de las seldas de un JTable Jcompones
es decir poner botones checks labels combos espiners etsetera
#20
Java / capturar teclado
9 Enero 2009, 07:11 AM
quisiera saber como capturar los eventos del teclado

por ejemplo al presionar escape se sierre la ventana
o al presionar ctrl+m gane el foco un area de texto
#21
Java / jspiner1.requestFocus no sierve
30 Diciembre 2008, 05:08 AM
alguien  sabe como hacer para que hacer que un Jspiner gane el maldito foco
>:( >:( >:(
#22
Java / mejorar codigo java
13 Diciembre 2008, 19:04 PM
alguien sabe de algunos consejo de como hacer nuestro porgramas mas rapido
en java es que siempre salen lentitos
#23
Java / look and feel y imagenes
14 Octubre 2008, 08:45 AM
alguien sabe de donde bajar looksandfeels ya echos y ademas iconos como los que son para cortar pegar cerrar abrir guardar

#24
Java / pregunta tonta
28 Agosto 2008, 05:44 AM
alguien sabe como saco el carater que usan para los character
en el string es asi  " " y es shif+2
#25
Java / execl adapter
14 Agosto 2008, 10:07 AM
bueno aqui les paso un codigo que me parecio muy interesante se trata de una clase que es capas de hacer que se pueda copiar y pegar en tus tablas

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.datatransfer.*;
import java.util.*;
/**
* ExcelAdapter enables Copy-Paste Clipboard functionality on JTables.
* The clipboard data format used by the adapter is compatible with
* the clipboard format used by Excel. This provides for clipboard
* interoperability between enabled JTables and Excel.
*/
public class ExcelAdapter implements ActionListener
   {
   private String rowstring,value;
   private Clipboard system;
   private StringSelection stsel;
   private JTable jTable1 ;
   /**
    * The Excel Adapter is constructed with a
    * JTable on which it enables Copy-Paste and acts
    * as a Clipboard listener.
    */
public ExcelAdapter(JTable myJTable)
   {
      jTable1 = myJTable;
      KeyStroke copy = KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK,false);
      // Identifying the copy KeyStroke user can modify this
      // to copy on some other Key combination.
      KeyStroke paste = KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK,false);
      // Identifying the Paste KeyStroke user can modify this
      //to copy on some other Key combination.
jTable1.registerKeyboardAction(this,"Copy",copy,JComponent.WHEN_FOCUSED);
jTable1.registerKeyboardAction(this,"Paste",paste,JComponent.WHEN_FOCUSED);
      system = Toolkit.getDefaultToolkit().getSystemClipboard();
   }
   /**
    * Public Accessor methods for the Table on which this adapter acts.
    */
public JTable getJTable() {return jTable1;}
public void setJTable(JTable jTable1) {this.jTable1=jTable1;}
   /**
    * This method is activated on the Keystrokes we are listening to
    * in this implementation. Here it listens for Copy and Paste ActionCommands.
    * Selections comprising non-adjacent cells result in invalid selection and
    * then copy action cannot be performed.
    * Paste is done by aligning the upper left corner of the selection with the
    * 1st element in the current selection of the JTable.
    */
public void actionPerformed(ActionEvent e)
   {
      if (e.getActionCommand().compareTo("Copy")==0)
      {
         StringBuffer sbf=new StringBuffer();
         // Check to ensure we have selected only a contiguous block of
         // cells
         int numcols=jTable1.getSelectedColumnCount();
         int numrows=jTable1.getSelectedRowCount();
         int[] rowsselected=jTable1.getSelectedRows();
         int[] colsselected=jTable1.getSelectedColumns();
         if (!((numrows-1==rowsselected[rowsselected.length-1]-rowsselected[0] &&
                numrows==rowsselected.length) &&
(numcols-1==colsselected[colsselected.length-1]-colsselected[0] &&
                numcols==colsselected.length)))
         {
            JOptionPane.showMessageDialog(null, "Invalid Copy Selection",
                                          "Invalid Copy Selection",
                                          JOptionPane.ERROR_MESSAGE);
            return;
         }
         for (int i=0;i<numrows;i++)
         {
            for (int j=0;j<numcols;j++)
            {
sbf.append(jTable1.getValueAt(rowsselected,colsselected[j]));
               if (j<numcols-1) sbf.append("\t");
            }
            sbf.append("\n");
         }
         stsel  = new StringSelection(sbf.toString());
         system = Toolkit.getDefaultToolkit().getSystemClipboard();
         system.setContents(stsel,stsel);
      }
      if (e.getActionCommand().compareTo("Paste")==0)
      {
          System.out.println("Trying to Paste");
          int startRow=(jTable1.getSelectedRows())[0];
          int startCol=(jTable1.getSelectedColumns())[0];
          try
          {
             String trstring= (String)(system.getContents(this).getTransferData(DataFlavor.stringFlavor));
             System.out.println("String is:"+trstring);
             StringTokenizer st1=new StringTokenizer(trstring,"\n");
             for(int i=0;st1.hasMoreTokens();i++)
             {
                rowstring=st1.nextToken();
                StringTokenizer st2=new StringTokenizer(rowstring,"\t");
                for(int j=0;st2.hasMoreTokens();j++)
                {
                   value=(String)st2.nextToken();
                   if (startRow+i< jTable1.getRowCount()  &&
                       startCol+j< jTable1.getColumnCount())
                      jTable1.setValueAt(value,startRow+i,startCol+j);
                 
               }
            }
         }
         catch(Exception ex){ex.printStackTrace();}
      }
   }
}

bueno primero digo que yo no lo ise y que lo unico que e echo es corregir un codigo fuente de esta pagina http://quicktable.org/jtable/quicktablemain.htm
#26
Java / No se encuentra la culmna
11 Agosto 2008, 03:53 AM
este es mi primer program con base de datos tengo instalado acces 2007


import java.sql.*;

class Class1{
    public static void main(String[] args){

        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection cn=DriverManager.getConnection("jdbc:odbc:cunta");
            Statement st=cn.createStatement();
            ResultSet datos=st.executeQuery("Select * from Facturas");
            while(datos.next()){
                System.out.println("Campo1: "+datos.getString("Id de cliente"));
            }
            cn.close();
        }
        catch(Exception e){
            System.out.println("Error en la DB: "+e);
        }
    }
}


el programe me vota este error

Error en la DB: java.sql.SQLException: Column not found
#27
Java / eventos de Jpiner
11 Agosto 2008, 02:42 AM
e intentado de todo para capturar los eventes de jspiner pero e fallado :-(
e intentado con esto

        spnmesa.addKeyListener(new KeyAdapter(){
                    public void keyPressed(KeyEvent e){
                        System.out.print("asd");
                       
                    }
                });

pero no me funciona
#28
Java / solo introducir letras
2 Agosto 2008, 23:00 PM
bueno lo que quiero hacer es crear un textfield en el que solo se le pueda poner letras
es decir no simbolos como !"·$%&/()=?¿
lo e intentado con esto


package project1;

import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.UIManager;

public class Application1 {
    public Application1() {
        JFrame frame = new Frame1();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        if (frameSize.height > screenSize.height) {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        frame.setLocation( ( screenSize.width - frameSize.width ) / 2, ( screenSize.height - frameSize.height ) / 2 );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        try {
            //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        new Application1();
    }
}



package project1;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.Robot;
public class Frame1 extends JFrame {


    private JTextField jTextField1 = new JTextField();

    public Frame1() {
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
        this.getContentPane().setLayout( null );
        this.setSize( new Dimension(400, 300) );
        jTextField1.setBounds(new Rectangle(70, 75, 145, 35));
        jTextField1.addKeyListener(new KeyAdapter() {
                    public void keyPressed(KeyEvent e) {
                        jTextField1_keyPressed(e);
                    }
                });
        this.getContentPane().add(jTextField1, null);

    }

    private void jTextField1_keyPressed(KeyEvent e) {
    Character caracter =e.getKeyChar();
    if(caracter.isDigit(caracter)){
        Robot robotsito=null;
        try{
            robotsito=new Robot();
            robotsito.keyPress(8);
        }
        catch(Exception ex){
           
        }
    }
    }
}


pero solo me evita poner numeros
#29
PHP / mi primera ves
1 Agosto 2008, 23:28 PM
bueno estoy listo para mi primera ves con una base de datos
como todos saben lo que piden las en presas son mysql con php
asi que me preguntaba que paginas y consejos me dan para iniciarme con ella
#30
Java / selecionar un boton
1 Agosto 2008, 07:07 AM
quiero que despues de presionar un boton se quede selecionado de tal forma que luego al pulsar enter se buelva a machucar
es decir si mi boton me muestra un dialogo quiero que despues de usarlo presion enter y me salga el dialogo otra ves
#31
Java / minimisar Jinternalframe
22 Julio 2008, 06:44 AM
como ago para que mi Jinternalframe aparezca minimisado
#32
Java / trauma con jdevelpoer
21 Julio 2008, 10:35 AM
bueno tengo el jdeveloper 1.3.3.0

lo que pasa es que antes solamente escribia el nombre de la clase luego presionaba ctrl+enter y me inportaba automaticamente la clase como siempre lo ago con el JOptionpame pero aora ya me salen otras obciones
lo que es peor tengo que estar inportando clase por clase y ba yegar un momento que no sepa



bueno la profesora nos paso el java a lo bruto osea que solo lo conprimio la carpeta de jdeveloper con winrar y les paso a todos
bueno quisiera saber si solo comprimiendo un programa y luego "instalarlo " solo desconpreimendo sea lo mejor y si eso trae algun problema especialmente con el jdeveloper

#33
Java / mi yar no funciona
19 Abril 2008, 19:42 PM
bueno este es el problema ya e trabajado con Jar un monton de vese y los e creado varias veces y jamas e tenido un solo porblema
bueno cuando agrego un panel con distribucion xylayout y creo el jar se crea satisfacoriamente pero cuando los ejecuto no pasa nada :-( :-( pero si buelvo a quitar el jpanel con distribucion xllayout y creo el jar de la misma forma funciona normal