elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: 1 ... 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 ... 63
281  Programación / Java / Re: Juego Gato en: 22 Marzo 2011, 05:43 am
Código:
package com.elhacker.ejemplo;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;

public class ApliacionMichi {
public static void main(String arg[]) {
JFrame jFrame = new JFrame();
jFrame.setLayout(new BorderLayout());
jFrame.add(new PanelPrincipal(), BorderLayout.CENTER);
jFrame.setSize(new Dimension(400, 400));
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setLocationRelativeTo(null);
jFrame.setVisible(true);

}
}

Código:
package com.elhacker.ejemplo;

import javax.swing.JButton;

public class BotonCeldaMichi extends JButton {

private static final long serialVersionUID = 1L;
private int fila;
private int columna;

public BotonCeldaMichi(int fila, int columna) {
super();
this.fila = fila;
this.columna = columna;
}

public int getFila() {
return fila;
}

public int getColumna() {
return columna;
}

}

package com.elhacker.ejemplo;

public interface ObservadorDeVictoria {
public void cuandoGano(TableroMichi tableroMichi);
}

Código:
package com.elhacker.ejemplo;

public enum OpcionMarca {

X("x"), O("o");

private String nombre = "";

private OpcionMarca(String nombre) {
this.nombre = nombre;
}

public OpcionMarca getOpcionOpuesta() {
if (this == OpcionMarca.O) {
return OpcionMarca.X;
} else {
return OpcionMarca.O;
}
}

@Override
public String toString() {
return nombre;
}
}


Código:

package com.elhacker.ejemplo;

import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class PanTablero extends JPanel {
private static final long serialVersionUID = 1L;
private final GridLayout gridLayout = new GridLayout(3, 3);
private final TableroMichi tableroMichi;

public PanTablero() {
this(new TableroMichi());
}

public PanTablero(TableroMichi tableroMichi) {
super();
this.tableroMichi = tableroMichi;
inicialisa();
}

public void inicialisa() {
setLayout(gridLayout);
agregaBotonesYEventos();
agregaEventosMichi();
}

private void agregaEventosMichi() {
tableroMichi.agregarObserVador(new ObservadorDeVictoria() {

@Override
public void cuandoGano(TableroMichi tableroMichi) {
ganaste();

}
});
}

private void ganaste() {
JOptionPane.showMessageDialog(null, new Label("felicidades"));

}

private void agregaBotonesYEventos() {
for (int fila = 1; fila <= 3; fila++) {
for (int columna = 1; columna <= 3; columna++) {
BotonCeldaMichi botonCeldaMichi = new BotonCeldaMichi(fila,
columna);
agreagEventos(botonCeldaMichi);
add(botonCeldaMichi);
}
}
}

private void agreagEventos(BotonCeldaMichi botonCeldaMichi) {
botonCeldaMichi.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent actionEvent) {
presionoAlgunBoton(actionEvent);
}

});
}

private void presionoAlgunBoton(ActionEvent actionEvent) {
BotonCeldaMichi botonCeldaMichi = (BotonCeldaMichi) actionEvent
.getSource();
ponerMarcaAlBoton(botonCeldaMichi);
tableroMichi.marcar(botonCeldaMichi.getFila(),
botonCeldaMichi.getColumna());

}

private void ponerMarcaAlBoton(BotonCeldaMichi botonCeldaMichi) {
botonCeldaMichi.setText(tableroMichi.getUltimaOpcion().toString());
}
}


Código:
package com.elhacker.ejemplo;

import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class TableroMichi {
private OpcionMarca ultimaOpcion;

private final TableModel tabla = new DefaultTableModel(3, 3);
private ObservadorDeVictoria observador;

public TableroMichi() {
this(OpcionMarca.X);
}

public TableroMichi(OpcionMarca primeraOpcionMarca) {
ultimaOpcion = primeraOpcionMarca.getOpcionOpuesta();
}

public void marcar(int fila, int columa) {
//no te la dejo tan facil :-)

}

public void agregarObserVador(final ObservadorDeVictoria observador) {
//no te la dejo tan facil :-)
}

public OpcionMarca getMarcaEnPocision(int fila, int columna) {
                //no te la dejo tan facil :-)
return null;
}

public OpcionMarca getUltimaOpcion() {
return ultimaOpcion;
}

public boolean isVicotoria() {
return ganoEnRecta() || ganoEnDiagonal();
}

public boolean ganoEnRecta() {
                  //no te la dejo tan facil :-)
              return false;
}

public boolean ganoEnFila(int fila) {
//no te la dejo tan facil :-)
return false;
}

public boolean ganoEnColumna(int columna) {
//no te la dejo tan facil :-) return false;
}

public boolean ganoEnDiagonal() {
return diagonalDeFilasYColumnasIguales()
|| diagonalDeFilasYColumnasDiferentes();
}

public boolean diagonalDeFilasYColumnasIguales() {
//no te la dejo tan facil :-)
return false;
}

public boolean diagonalDeFilasYColumnasDiferentes() {
return false;
}

private boolean sonMismasMarcas(OpcionMarca marca, OpcionMarca otraMarca) {
//no te la dejo tan facil :-)
return false;
}

public void limpiar() {
//no te la dejo tan facil :-)
}

}


[code]

solo tienes que hacer pruebas unitarias y hacer que todos los metodos pasen correctamente luego todo va a funcionar como por arte de magia
[/code]
282  Programación / Java / Re: Juego Gato en: 22 Marzo 2011, 05:35 am
-me pregunto que harás cuando tengas que crear un juego de mesa que tenga 100 cuadriculas o si creas un panel donde se visualicen las mesas de un restaurante y te obliguen a que puedas dibujar de forma arbitraria una cantidad indigerida de mesas
-esto es un caso de los que hablo donde el ide estorba y crea más problemas de los que resuelve
-mi recomendación que primero estudies como usar el patron observador y que aprendas a crear formularios a mano
-otra recomendación es que aprendas a hacer pruebas unitarias
-es una mala idea que pongas 9 labels en primer lugar porque los leves no se pueden editar por el usuario y luego tu tendrás que hacer alguna operación rara que le agrega dificultad para editarlo
-si empiezas a pensar en componentes swing entonces ya sabes que tienes un problema grave
-yo lo resolví con botones y cree un botón genérico heredando y luego lo las instancias con un for otra opción es crear la lógica de los botones en una clase genérica y luego la agrega instancias de esa clase genérica a cada botón
283  Programación / Java / Re: filtrar Texto en un JTable conectado a un BD con un JButton y un JTextField? en: 21 Marzo 2011, 01:30 am
al metodo mostrar tabla ponle un parametro de tipo string
y en la consulta pon


public void mostrarTabla(String nombre){
//el mismo  codigo que tu escribiste
modelo.setRoucount(0);
 ResultSet rs = s.executeQuery ("select * from categoria where nombre like '%"+nombre+"%'");
//el resto del codigo que tu escritibste
}

public void presionCajaDeTexto(){
mostrarTabla(txtNombreCategoria.getText());
}


para que la caja de texto escuche cuando le hacen click

field.addKeyListener(new KeyAdapter() {
         @Override
         public void keyTyped(KeyEvent e) {
            presionCajaDeTexto()
         }
      });


284  Programación / Java / Re: Coomo ejecutar fichero desde java??? en: 17 Marzo 2011, 01:17 am
la investigacion no hace daño

String[] command = {"/etc/ssh", "myUser@remoteServer", "runprog.ksh 'param1'"};
 final Process process = Runtime.getRuntime().exec(command);
285  Programación / Java / Re: Ayuda en: 16 Marzo 2011, 23:24 pm
pon codigo de lo que intentaste para corregirte
286  Programación / Java / Re: Duda basica java en: 16 Marzo 2011, 02:09 am
Citar
y ese objeto creado de la clase B tiene que llamar a el metodo numero¿Como lo hago?
Respuesta corta
- lo más probable es que estés confundido y que estés volteando las relaciones es decir que b contenga a y no al revés pero es difícil saber si eso es correcto si no pones el ejemplo concreto que estas usando
-si realmente se debes ejecutar código después de otra cosa eso lo puedes a mano (muy poco recomendado) o usando el patrón observador

Para el flame
-siempre me confundo cuando hablan de un a que dentro de una b que llama a un no sé que habla en cosas concretas con código (clase carro factura persona empleado servicio de impresion etc)

Código:
La clase A hereda de otra clase diferente, como en java no hay herencia múltiple la clase B no puede heredar a la A

cuando eso pasa lo más probable es que hay un mal diseño(no siempre a veces no tiene opción) y la sospecha es que a y b deban heredar de una clase abstracta(no entiendo porque nunca la usan si les han enseñado como se hace) esa clase abstracta tiene que tener el código común que deben tener todos sus hijos es recomendable que una clase abstracta implemente una interface(para definir un contrato y reducir al máximo el acoplamiento) y que la clase abstracta implemente esa interface y que escriba la implementación por defecto(para que los hijos no tengan código repetido) de la mayoría de los métodos de la interface ejemplo tablemodel abstracttablemodel y defaultablemodel

Ejemplo de la pesadilla del mal uso de herencia son las versiones antiguas de ejb(eso fue un fiasco y existimos muchos haters de ejb) cada objeto de negocio(casi nunca son pocas) tenían que heredar de abstractnisiquieralopuedopronunciarlo y luego implementar sus todos sus métodos creo que son 4 es decir que si tienes 25 objetos de negocio(facutra carro persona,etc) tenias que implementar 100 métodos al estilo copy paste
existen librerías que las denomina poco intrusivas (sin comillas) jpa jdo hibernate ultima versión de ejb que usan muy pocas clases y herencia (me gustan mucho) por la misma razón que sitas "para evitar la necesidad de atorarse con herencia múltiple" ellas usan principalmente anotaciones y programación orientada a aspectos(sin que el programador lo sepa)

-eso de que java no tiene herencia múltiple si friega y muy raras veces te encuentras con ese tipo de problemas y después de mucho pensarlo la solución es simple no uses herencia a menos que tengas una buena razón para hacer es recomendable usar herencia cuando es tu propio código y puedas cambiarlo como se te da la gana
Solo usa herencia cuando algo tenga relación de "es un" (un perro es un mamífero) además si es posible que la relación entre clases sea "tiene un" (una persona tiene una cabeza) es mejor no usar herencia no usar herencia solo por el pretexto "es que se parecen mucho y quiero ahorrar código"

-en caso de que la fregaste usaste herencia o la usaste mal(le malograste el diseño a los futuros programadores) te queda pocas opciones usar aspectos(forzando "herencia múltiple" a la mala) o hacer que los clientes tengan que implementar una interface(generalmente la solución es miserable teniendo 100 de clases con implementación repetitiva y que se tiene que mantener) otra opción la mejor pero de lejos la más compleja es que otra clase cree un objeto te implemente una interface ejemplo tu le pasas una factura y te crea un objeto de tipo observable

Observable facutraObserVable = new CreadorObservable(new Factura()).obtener();
Persistible productoPerisitible = new CreadorPersistible(new Producto()).obtener();
Disculpa que escriba mucho pero es que tengo demonios que exorcizar  y es mejor escribir que andar golpeando a todos los programadores con los que no comparto mis puntos de vista
287  Programación / Java / Re: Problema programando una agenda en: 16 Marzo 2011, 00:58 am
-respuesta corta no manejas las excepciones estas obligado a usar el bloque try catch cuando los métodos te obligan puedes leer el java doc para comprobar que el método exija ser encerrado entre try catch en caso de que uses el ide lee los mensajes de error ( porque nunca lo hacen) o asle clik al icono de hojito interrogacion esclamacion bicho o algún tipo de botón que este  en la línea resaltada como error (normalmente de color rojo ) para que te escriba el código faltante

-es recomendable que escribas getters y setters y constructor

-es recomendable que sepas que son las excepciones y como se manejan correctamente

-si tienes un método que tenga una función que no tenga ninguna relación con la responsabilidad de la clase y que no llame a ninguna variable global de la propia clase y que además tenga una lista larga de parámetros y que aparte los parámetros tengan mucho que ver eso te grita que es extremadamente probable que no sea un buen diseño o una buena idea en esos casos es mejor que lo saques en una clase aparte y que remplaces la lista de parámetros por un objeto

-tal vez te parezca que es mucho problema programar en varias clases pero notas la gran diferencia cuando quieres cambiar algo y no lo tienes que hacer en 1000 partes diferentes

-la solución propuesta no maneja los errores de forma exhaustiva pero por lo menos lo maneja
Código:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class EscritorAgenda {

private final BufferedWriter bufferedWriter;
         public static void main(String arg[]) {
EscritorAgenda escritorAgenda = new EscritorAgenda(new File(
"agenda.txt"));
escritorAgenda.escribir(new Agenda("nombre", "apellido", 123456,
"email"));
escritorAgenda.close();
}
public EscritorAgenda(File file) {
try {
bufferedWriter = new BufferedWriter(new FileWriter(file));
} catch (IOException e) {
throw new RuntimeException(e);
}

}



public void escribir(Agenda agenda) {
try {
bufferedWriter.append(agenda.toString());
} catch (IOException e) {
throw new RuntimeException(e);
}
}

public void close() {
try {
if (bufferedWriter != null) {
bufferedWriter.close();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
288  Programación / Java / Re: Clase interna, acceder a objetos en: 6 Marzo 2011, 00:03 am
-evita usar mouselistener es mejor que extiendas de mouseAdapter asi tienes codigo mas limpio

-que una variable sea final es algo muy bueno en realidad no ponerle a una variable final especialmente si es global es una mala idea y conlleva a que vuelvas todo mas difícil así que a tus variables globales ponle final a menos que tengas una buena razón por no hacerlo y si necesitas que una variable sea final pues no te hagas problemas

-si de todas maneras quieres trabajar sin usar final entonces así puedes hacerlo
Así primero pones la variable como global luego creas un método en la clase principal y finalmente llamas al método que has creado desde la clase anónima interna

Código:
package org.kodejava.example.swing;

import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class MouseClickEventDemo extends JFrame {
    private JLabel label = new JLabel();
       
     public MouseClickEventDemo() {
        initComponents();
    }

    private void initComponents() {
        setSize(300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        textArea.setText("Click Me!");

        textArea.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                presionoBoton(e)
            }
        });

        getContentPane().add(textArea);
    }

    public void presionoBoton(MouseEvent e) {
     //as lo que quieras con el label
   }
}

289  Programación / Java / Re: como mostrar datos de mysql en java ide netbeans en: 3 Marzo 2011, 02:44 am
tienes que obtener un resulset apartir de un statment con executequery

y luego recorres el resulset y haces lo que quieras con el resulset

asi devulve un resulset apartir de un statemnt

rs = stmt.executeQuery();

asi recorres el resulset

while (rs.next())
   System.out.println (rs.getString("titulo"));

290  Programación / Java / Re: Nuevo en Java... y ahora que hago XD en: 3 Marzo 2011, 02:38 am
el mejor ide para que comiences si de verdad quieres certificarte y ser un buen programador definitivamente es blog de notas

sobre lo de productividad lo mas probables es que jales si intentas certificarte por comenzar usando un ide "para la productividad" debido a que en la certificación te obligan a que sepas a fondo lo que haces cosas que el ide te enmascara y te oculta y te crea un falta ilusión de conocimiento justo ay temas de como compilar como empaquetar como distribuir etc y te piden que sepas como lo haces a mano asi se aseguran a certificar a gente con conocimientos profundos del lenguaje
Páginas: 1 ... 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 ... 63
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines