HELP

5 views
Skip to first unread message

Arbey Jimenez Vidal

unread,
Aug 26, 2010, 9:35:29 AM8/26/10
to jav...@googlegroups.com
Hola grupo es la primera vez que escribo pidiendo ayuda. tengo un pequeño problema y espero que alguno me pueda colaborar.

mi codigo gernera una especie de simulacion para atencion al publico calcula tipo de prioridades al momento de atender.

y este es mi codigo.

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

import javax.swing.*;
import javax.swing.border.TitledBorder;
public class simulacion extends JFrame implements ActionListener{

    /**
     * declaracion de todas las etiquetas
     */
    private JLabel lblHtrabajo = new JLabel("Horas Trabajo:");
    private JLabel lblNumPedidos = new JLabel("Número pedidos:");
    private JLabel lblHorario = new JLabel("Horario:");
    private JLabel lbl = new JLabel("-");
    private JLabel lblHoraMax = new JLabel("Hora max:");
    private JLabel lblOrdinarios = new JLabel("Ordinarios:");
    private JLabel lblPrioritarios = new JLabel("Prioritarios:");
   
    private JLabel lblSeparador = new JLabel("p/c");
    private JLabel lblPorcentaje = new JLabel("%");
    private JLabel lblTotal = new JLabel("Total");
    private JLabel lblHoras = new JLabel("Horas");
    private JLabel lblTotalHoras = new JLabel("T. Horas:");
    private JLabel lblNumeroOper = new JLabel("N. Oper:");
   
    /**
     * declaracion de los campos de texto
     */
    private JTextField txtHtrabajo = new JTextField();
    private JTextField txtNumPedidos = new JTextField();
    private JTextField txtHorarioInicio = new JTextField("8:00 AM");
    private JTextField txtHorarioFin = new JTextField("6:00 PM");
    private JTextField txtHoraMax = new JTextField();
    private JTextField txtOrdinariosPorcent = new JTextField();
    private JTextField txtPrioritariosPorcent = new JTextField();
    private JTextField txtOrdinariosHoras = new JTextField();
    private JTextField txtPrioritariosHoras = new JTextField();
    private JTextField txtOrdinariosTotal = new JTextField();
    private JTextField txtPrioritarioTotal = new JTextField();
    private JTextField txtTotalHoras = new JTextField();
    private JTextField txtTotalOper = new JTextField();
    /**
     * Declaracion de paneles
     */
    private JPanel pnlVariables=new JPanel();
    private JPanel pnlDatos = new JPanel();
    private JPanel pnlResultado = new JPanel();
   
    /**
     * declaracion de los controles
     */
    private JButton btnCalcular;
    private JButton btnCancelar;
   
   
    /**
     * Jlist
     */
    private JList listResult;
    private DefaultListModel modeloDatos;
   
    public simulacion()
    {
        super("Atencion al cliente");
        setSize(600,500);
        setLayout(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        TitledBorder titulo = new TitledBorder("Variables");
        pnlVariables.setBorder(titulo);
        pnlVariables.setBounds(10, 10, 310, 180);
        pnlVariables.setLayout(new GridLayout(5,2));
        pnlVariables.add(lblHtrabajo);
        pnlVariables.add(txtHtrabajo);
        pnlVariables.add(lblNumPedidos);
        pnlVariables.add(txtNumPedidos);
        pnlVariables.add(lblHorario);
        pnlVariables.add(txtHorarioInicio);
        pnlVariables.add(lbl);
        pnlVariables.add(txtHorarioFin);
        pnlVariables.add(lblHoraMax);
        pnlVariables.add(txtHoraMax);
        add(pnlVariables);
       
        TitledBorder tituloP = new TitledBorder("Prioridades");
        pnlDatos.setBorder(tituloP);
        pnlDatos.setBounds(10, 200, 310, 200);
        pnlDatos.setLayout(new GridLayout(4,4));
        pnlDatos.add(lblSeparador);
        pnlDatos.add(lblPorcentaje);
        pnlDatos.add(lblTotal);
        pnlDatos.add(lblHoras);
        pnlDatos.add(lblOrdinarios);
        pnlDatos.add(txtOrdinariosPorcent);
        txtOrdinariosTotal.enable(false);
        pnlDatos.add(txtOrdinariosTotal);
       
        txtOrdinariosHoras.enable(false);
        pnlDatos.add(txtOrdinariosHoras);
        pnlDatos.add(lblPrioritarios);
       
        pnlDatos.add(txtPrioritariosPorcent);
        txtPrioritarioTotal.enable(false);
        pnlDatos.add(txtPrioritarioTotal);
        txtPrioritariosHoras.enable(false);
        pnlDatos.add(txtPrioritariosHoras);
       
       
        pnlDatos.add(lblTotalHoras);
        txtTotalHoras.enable(false);
        pnlDatos.add(txtTotalHoras);
       
        pnlDatos.add(lblNumeroOper);
        txtTotalOper.enable(false);
        pnlDatos.add(txtTotalOper);
        add(pnlDatos);
       
       
        TitledBorder tituloR = new TitledBorder("Resultados");
        pnlResultado.setBorder(tituloR);
        pnlResultado.setLayout(null);
        pnlResultado.setBounds(330, 10, 250, 350);
        listResult = new JList();
        JScrollPane barra = new JScrollPane(listResult);
        barra.setBounds(20, 30, 210, 300);
        pnlResultado.add(barra);
        add(pnlResultado);
       
        btnCalcular = new JButton("Calcular");
        btnCalcular.setBounds(330, 380, 100, 25);
        btnCalcular.addActionListener(this);
       
        btnCancelar = new JButton("Cancelar");
        btnCancelar.setBounds(480, 380, 100, 25);
        btnCancelar.addActionListener(this);
       
        add(btnCalcular);
        add(btnCancelar);
        setVisible(true);
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        new simulacion();

    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == btnCalcular)
        {
            if (txtHtrabajo.getText().equals("")){
                JOptionPane.showMessageDialog(new JDialog(), "No ha especificado las horas de trabajo","ERROR",JOptionPane.ERROR_MESSAGE);
                txtHtrabajo.requestFocus();
                return;
            }
            if(txtNumPedidos.getText().equals("")){
                JOptionPane.showMessageDialog(new JDialog(), "No ha especificado la cantidad de pedidos","ERROR",JOptionPane.ERROR_MESSAGE);
                txtNumPedidos.requestFocus();
                return;
            }
       
            if((Integer.parseInt(txtOrdinariosPorcent.getText()) + Integer.parseInt(txtPrioritariosPorcent.getText())) != 100)
            {
                JOptionPane.showMessageDialog(new JDialog(), "La suma de los porcentajes debe ser 100%","ERROR",JOptionPane.ERROR_MESSAGE);
                return;
            }
            modeloDatos = new DefaultListModel();
            int cOrdinarios=0;
            int cPrioritarios=0;
            for (int i = 1; i <= Integer.parseInt(txtNumPedidos.getText());i++){
                int val = (int) (Math.random() * 100);
                if (val < Integer.parseInt(txtOrdinariosPorcent.getText())){
                    modeloDatos.addElement(i + " - [ " +val +" => ORDINARIO ]" );
                    cOrdinarios++;
                }
                else {
                    modeloDatos.addElement(i + " - [ " +val +" => PRIORITARIO ]");
                    cPrioritarios++;
                }
               
            }
            txtOrdinariosTotal.setText(String.valueOf(cOrdinarios));
            txtOrdinariosHoras.setText(String.valueOf((cOrdinarios * 2)));
            txtPrioritarioTotal.setText(String.valueOf(cPrioritarios));
            txtPrioritariosHoras.setText(String.valueOf((cPrioritarios * 4)));
            int totalH = Integer.parseInt(txtOrdinariosHoras.getText()) + Integer.parseInt(txtPrioritariosHoras.getText());
            txtTotalHoras.setText(String.valueOf(totalH));
            int NOper = totalH / Integer.parseInt(txtHtrabajo.getText());
            txtTotalOper.setText(String.valueOf(NOper));
           
            listResult.setModel(modeloDatos);
        }
        if (e.getSource() == btnCancelar)
        {
            System.exit(0);
        }
    }

}

El lio esta en que tambien dependiendo de los datos arrojados debo pintar un grafica de comportamiento de cada uno de los casos
lo he intentado de todas las formas que se. pero no he podido agradesco su colaboracion y tiempo.


--
Carlos Arbey Jiménez Vidal

Tecnico Profesional en Sistemas y Computacion
INSTITUTO TOLIMENSE DE FORMACIÓN TÉCNICA PROFESIONAL


Carlos Andrés

unread,
Aug 26, 2010, 12:05:30 PM8/26/10
to jav...@googlegroups.com
Hola,

Hay varias opciones, si entendu bien tu pregunta, una de ellas es utilizar las librerias de JFreeChart aqui te dejo un link con un ejemplo quizas te sirva: http://snippets.dzone.com/posts/show/2945.
La otra es que generes tus propias graficas, (si son simples), puedes usar Java 2D. ahi puedes generar diagramas con lineas dando coordenadas.

Espero te sirva.

Saludos.



--
www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.

Arbey Jimenez Vidal

unread,
Aug 26, 2010, 1:45:37 PM8/26/10
to jav...@googlegroups.com
Pues la idea es hacerlo simple sin la libreria por que da la apariencia de graficas estadisticas y no es lo que necesito. lo de JAVA 2D lo intente pero tengo problemas a la hora de generarlo no se como enviarle las coordenadas o la grafica debe quedar mas o menos com la apariencia de l aarchivo que adjunto si me puedes colaborar almenos de como empezar yo me podria defender pero no se como pintarlo.

grafica.bmp

Jorge Medina

unread,
Aug 26, 2010, 9:39:59 PM8/26/10
to jav...@googlegroups.com
¿que es lo que has intentado?
Baja el código de estos ejemplos, intenta modificarlo y luego vuelve
con mas preguntas.

http://java.sun.com/products/java-media/2D/samples/index.html

2010/8/26 Arbey Jimenez Vidal <arbeyj...@gmail.com>:

Carlos Andrés

unread,
Aug 27, 2010, 11:52:13 AM8/27/10
to jav...@googlegroups.com
Revisa los que te dice Arbey, ahi hay todo tipo de graficas el siguiente link es el demo completo en un applet:

http://java.sun.com/products/java-media/2D/samples/java2demo/Java2Demo.html

Saludos

Arbey Jimenez Vidal

unread,
Aug 27, 2010, 12:12:59 PM8/27/10
to jav...@googlegroups.com
Les agradesco a todos por su colaboracion. lei lo que me recomendaron y otras cosas adicionales y logre pintar mi grafica solo me falta saber un dato pero eso si me toca es ami. preguntarle al profesor. les anexo mi codigo por si talvez tienen alguna sugerencia para mejorar.


import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class Grafica extends JPanel{
    private static final long serialVersionUID = 1L;
    private int tipoOrden;
    private int valorOrden=4;
    private static Nodo Cab = null;

    public void Agregar(Nodo r){
        if (Cab == null)
        {
            Cab = new Nodo();
            r.Sig = null;
            Cab = r;
        }
        else{
            Nodo aux = Cab;
            while(aux.Sig != null)
            {
                aux = aux.Sig;
            }
            r.Sig = null;
            aux.Sig = r;
        }
           
    }
   
    public void paintComponent(Graphics g){
        g.setColor(Color.lightGray);
        g.fillRect(0, 0, 749, 400);
        g.setColor(new Color(237,237,237));
        for(int x=0;x<750;x+=20){
            g.drawLine(x, 0, x, 400);
        }
        for(int y=0;y<400;y+=20){
            g.drawLine(0, y, 750, y);
        }
    }
   
    public void pintar(){
        this.paintComponent(getGraphics());
        this.paintNodes(getGraphics());
    }
    public void paintNodes(Graphics g){
        g.setColor(Color.BLUE);
        g.setColor(Color.white);
        Nodo aux = Cab;
        while (aux.Sig != null){
            g.fillRect((aux.Hora + aux.NumAleatoreo), (aux.Hora + aux.NumAleatoreo), 20, 20);
            System.out.println(this.valorOrden);
            aux = aux.Sig;
        }
        Cab = null;
    }
   
   
}



public class Nodo {

    public int NumAleatoreo;
    public int Hora;
    public int Tipo;
    public Nodo Sig;
    private JTextField txtHtrabajo = new JTextField("8");
    private JTextField txtNumPedidos = new JTextField("20");

    private JTextField txtHorarioInicio = new JTextField("8:00 AM");
    private JTextField txtHorarioFin = new JTextField("6:00 PM");
    private JTextField txtHoraMax = new JTextField();
    private JTextField txtOrdinariosPorcent = new JTextField("20");
    private JTextField txtPrioritariosPorcent = new JTextField("80");

    private JTextField txtOrdinariosHoras = new JTextField();
    private JTextField txtPrioritariosHoras = new JTextField();
    private JTextField txtOrdinariosTotal = new JTextField();
    private JTextField txtPrioritarioTotal = new JTextField();
    private JTextField txtTotalHoras = new JTextField();
    private JTextField txtTotalOper = new JTextField();
    /**
     * Declaracion de paneles
     */
    private JPanel pnlVariables=new JPanel();
    private JPanel pnlDatos = new JPanel();
    private JPanel pnlResultado = new JPanel();
    private Grafica panel = new Grafica();

   
    /**
     * declaracion de los controles
     */
    private JButton btnCalcular;
    private JButton btnCancelar;
   
   
    /**
     * Jlist
     */
    private JList listResult;
    private DefaultListModel modeloDatos;
   
   
    /**
     * Grafica
     */


    public simulacion()
    {
        super("Atencion al cliente");
        setSize(1000,500);
        btnCancelar.setBounds(620, 380, 100, 25);
        btnCancelar.addActionListener(this);
       
//        TitledBorder tituloG = new TitledBorder("Grafica");
//        panel.setBorder(tituloG);
        panel.setBounds(590,10,300,350);
        add(panel);
            int val = 0;

            for (int i = 1; i <= Integer.parseInt(txtNumPedidos.getText());i++){
                 val = (int) (Math.random() * 100);
                 Nodo p = new Nodo();

                if (val < Integer.parseInt(txtOrdinariosPorcent.getText())){
                    modeloDatos.addElement(i + " - [ " +val +" => ORDINARIO ]" );
                    p.NumAleatoreo = val;
                    p.Tipo = 1;
                    p.Hora = 1;
                    panel.Agregar(p);

                    cOrdinarios++;
               
                }
                else {
                    modeloDatos.addElement(i + " - [ " +val +" => PRIORITARIO ]");
                    cPrioritarios++;
                    p.NumAleatoreo = val;
                    p.Tipo = 1;
                    p.Hora = 1;
                    panel.Agregar(p);

                   
                }
                               
            }
           
            txtOrdinariosTotal.setText(String.valueOf(cOrdinarios));
            txtOrdinariosHoras.setText(String.valueOf((cOrdinarios * 2)));
            txtPrioritarioTotal.setText(String.valueOf(cPrioritarios));
            txtPrioritariosHoras.setText(String.valueOf((cPrioritarios * 4)));
            int totalH = Integer.parseInt(txtOrdinariosHoras.getText()) + Integer.parseInt(txtPrioritariosHoras.getText());
            txtTotalHoras.setText(String.valueOf(totalH));
            int NOper = totalH / Integer.parseInt(txtHtrabajo.getText());
            txtTotalOper.setText(String.valueOf(NOper));
            listResult.setModel(modeloDatos);
            panel.pintar();

           
           
        }
        if (e.getSource() == btnCancelar)
        {
            System.exit(0);
        }
    }

}

Si depronto me pueden ayudar a mejorar el codigo o encuentrar algun error. estare pendiente de sus sugerencias gracias por la ayuda
simulacion.tar.gz

Pablo Codeiro

unread,
Aug 27, 2010, 12:19:20 PM8/27/10
to jav...@googlegroups.com
Mejorar el codigo?

Esto ya es hilar un poco fino... pero se considera una mala practica poner la "logica de negocio" en la vista. De hecho, la vista nomas tendria que recibir datos de otro objeto, y mostrarlos. Incluso las validaciones, generalmente se usa un bean que los valide (con algo onda Hibernate Validator, o expresiones regulares en su defecto).

Igual, lo tuyo al parecer es un TP, asique probablemente no debe ser escalable :P
Reply all
Reply to author
Forward
0 new messages