|
Mostrar Temas
|
Páginas: 1 [2] 3 4 5
|
11
|
Programación / Java / contribución pruebas unitarias asynchronas
|
en: 18 Julio 2019, 09:36 am
|
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 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 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
|
|
|
12
|
Programación / Java / contribución mini ejemplo de lenguaje interpretado
|
en: 15 Noviembre 2018, 21:32 pm
|
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 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 "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("booleans"); "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("programs"); "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("=======endprogram============================="); System. out. println("=======output program========================="); System. out. println(programEvaluetor. evalProgram(text )); System. out. println("=======end output program====================="); } //conditionals programs System. out. println("conditionals programs"); "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("=======endprogram============================="); System. out. println("=======output program========================="); System. out. println(programEvaluetor. evalProgram(text )); System. out. println("=======end output program====================="); } //conditionals programs } private boolean evalCondition (String condition ) { final String evalBoleanExpresion = evalBoleanExpresion (condition. substring(3, condition. length() - 2)); return Boolean. parseBoolean(evalBoleanExpresion ); } String[] comands = expresion. split("\n"); boolean run = true; for (int i = 0; i < comands.length; 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); } String[] comandPart = expresion. split("="); 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; } 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); } return evalExpresion(coeficientString.substring(1, coeficientString.length() - 1)); } 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(); 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(); 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(); 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; } if (expresion. chars(). allMatch(Character::isLetter )) { return variables.get(expresion); } else { return expresion; } } char[] characters = expresion.toCharArray(); 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 + ""; } if (expresion.contains("<") || expresion.contains(">")) { String[] split = expresion. split("<|>"); String left = evalExpresion (split [0]); String right = evalExpresion (split [1]); if (expresion.contains("<")) { } if (expresion.contains(">")) { } } 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
|
|
|
13
|
Programación / Java / Patrom mvp
|
en: 7 Noviembre 2013, 02:25 am
|
Patron mvpPobre 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 clasesLimitaciones del proyectoEste 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 mvpEl 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 usarloRecomiendo 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 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()); } }
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); }
import java.awt.Container; public class PanMantenimientoPersonalSwing extends JPanel implements PanMantenimientoPersonal { public PanMantenimientoPersonalSwing() { setLayout(null); lblNombre.setBounds(10, 11, 56, 14); add(lblNombre); txtCodigo.setBounds(73, 8, 86, 20); add(txtCodigo); txtCodigo.setColumns(10); label.setBounds(10, 39, 56, 14); add(label); txtNombre.setColumns(10); txtNombre.setBounds(73, 36, 86, 20); add(txtNombre); lblApellido.setBounds(10, 67, 56, 14); add(lblApellido); txtApellido.setColumns(10); txtApellido.setBounds(73, 64, 86, 20); add(txtApellido); lblEdad.setBounds(10, 95, 56, 14); add(lblEdad); txtEdad.setColumns(10); txtEdad.setBounds(73, 92, 86, 20); add(txtEdad); scrollPane.setBounds(10, 148, 419, 142); add(scrollPane); "codigo", "nombre", "apellido", "edad", "sueldo" })); scrollPane.setViewportView(table); lblSueldo.setBounds(10, 123, 56, 14); add(lblSueldo); txtSueldo.setColumns(10); txtSueldo.setBounds(73, 120, 86, 20); add(txtSueldo); for (AgregoListener agregoListener : listaAgregoListener) { agregoListener.fueAgregado(); } } }); btnAgrega.setBounds(175, 7, 89, 23); add(btnAgrega); for (ModificoListener modificoListener : listaModificoListener) { modificoListener.fueModificado(); } } }); btnModifica.setBounds(175, 35, 89, 23); add(btnModifica); 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<>(); @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) { 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; } }
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.setSize(500, 400); jFrame. setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE); jFrame.setLocationRelativeTo(null); jFrame.getContentPane().add(panMantenimientoPersonal, 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 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
|
|
|
14
|
Programación / Java / creacion de graficos estadisticos en tiempo real
|
en: 30 Mayo 2013, 18:52 pm
|
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 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); add(new PanelGraphicaEnTiempoReal()); } public static void main (String[] args ) { FormularioPrincipal frmPrincipal = new FormularioPrincipal(); frmPrincipal.setVisible(true); } 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()]; for (int i = 0; i < respuesta.length; i++) { respuesta[i]=creadorDeAleatorios.nextFloat();//crea un aleatorio; } return respuesta; } @Override 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"; } return "ventas"; } private Second enSegundos() { return new Second(); } public int getCantidadPorSerie() { return 120; } public int getCantidadDeSeries() { return 1; } } }
|
|
|
15
|
Programación / Java / como crear formularios
|
en: 11 Diciembre 2011, 03:20 am
|
Esta vez voy hablar con evidencias Veamos como un desarrollador normal creando un formulario 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(); jLabel3 = new javax. swing. JLabel(); 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; // 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 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 { public PanelContacto() { 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)); } 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 package com.ejemplo; import java.awt.Container; import javax.swing.JSpinner; import javax.swing.JTextField; import javax.swing.SpinnerNumberModel; public class PanelConPatronBuilder { public PanelConPatronBuilder() { } return new PanelBuilder (). agregaFila("Nombre", 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 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 { int cont = -1; public PanelBuilder() { } panel. add(new JLabel(nombre ), restricionDeEtiqueta (++cont )); panel.add(jTextField, restricionComponente(cont)); return this; } return new GridBagConstraints(1, cont, 1, 1, 1, 0, GridBagConstraints. FIRST_LINE_START, GridBagConstraints. HORIZONTAL, insets, 0, 0); } return new GridBagConstraints(0, cont, 1, 1, 0, 0, GridBagConstraints. FIRST_LINE_START, GridBagConstraints. NONE, insets, 0, 0); } 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; public class PanelContactoMetaWidtget { SwingMetawidget swingMetawidget =new SwingMetawidget(); swingMetawidget.setToInspect(new Contacto()); return swingMetawidget; } }
Y requiere un pojo de toda la vida package com.ejemplo; public class Contacto { private int edad; return nombre; } public void setNombre (String nombre ) { this.nombre = nombre; } return apellido; } public void setApellido (String apellido ) { this.apellido = apellido; } 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-
|
|
|
16
|
Programación / Java / Como redactar tu código para exponer dudas
|
en: 2 Enero 2011, 06:17 am
|
Siempre que alguien me pide ayuda en lo que se refiere a programación me quedo asi 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 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
|
|
|
17
|
Seguridad Informática / Nivel Web / respuesta contradicotria en sql injection
|
en: 5 Septiembre 2010, 05:36 am
|
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 me voto de resultado You 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 The used SELECT statements have a different number of columns
|
|
|
18
|
Programación / Java / ide para beans biding
|
en: 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
|
|
|
19
|
Programación / Java / manejando el tamaño relativo a el de la resolucion de la pantalla
|
en: 12 Julio 2009, 22:41 pm
|
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);
|
|
|
20
|
Programación / Java / conexion cerrada?
|
en: 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 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
|
|
|
|
|
|
|