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ú

Mensajes - alexg88

#1
Java / Re: ayuda con este programa
3 Julio 2012, 22:12 PM
Para guardar varios valores puedes usar un array.

Código (java) [Seleccionar]

double[] a = new double[10];
double[] b = new double[10];
double[] c = new double[10];


Luego utilizas un bucle for y accedes a cada variable del array mediante los []:

Código (java) [Seleccionar]

//Almacenas un valor de tipo double en el primer elemento del array
a[0] = in.nextDouble(); //in.nextDouble lee caracteres del teclado (porque viene de System.in) siempre que estos puedan convertirse en un valor de tipo double. En caso contrario, devuelve una excepción que deberías capturar
#2
Buenas,

Tienes algún error y te voy a hacer alguna sugerencia.

El problema lo tienes con el layout. Cada componente en Java que es contenedor de otros componentes tienen lo que se llama el layout, es decir, la forma en que se van a mostrar los elementos que se añadan al componente. El layout por defecto es null (no tiene layout), es decir, tienes que especificar concretamente donde quieres que aparezcan cada uno de los componentes (con el método setBounds, por ejemplo). Es por esto que te aparece sólo el último elemento que añades. En realidad, están todos visibles, pero el último de ellos está encima de todos los demás (están todos en la misma posición).

Código (java) [Seleccionar]

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package vector;

import java.awt.Container;
import java.awt.FlowLayout;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JLabel;

class pick {

    public JLabel etiquetas(int tipo) {
        return new JLabel();
    }

    @Override
    public String toString() {
        return "$$$$$";
    }
}

class Facturas extends pick {

    @Override
    public String toString() {
        return "facturas";
    }

    @Override
    public JLabel etiquetas(int tipo) {

        JLabel etiquetas = new JLabel();

        switch (tipo) {
            ///1 : Facturas Comerciales.
            ///2 : Facturas Clientes Individuales.
            ///3 : Facturas Con RNC.
            ///4 : Facturas Sencillas.
            ///5 :  $moneda(depende de una clase de moneda).

            case 1:
                etiquetas.setText("Facturas Comerciales\n");
                break;
            case 2:
                etiquetas.setText("Clientes Individuales \n");
                break;
            case 3:
                etiquetas.setText("Facturas Con RNC\n");
                break;
            case 4:
                etiquetas.setText("Facturas Sencillas \n");
                break;




        }

        return etiquetas;
    }
}

class LaunchGuiComponent {

    public void Launch(pick t) {


        JFrame window = new JFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(900, 700);
        window.setTitle(t.toString());
        ArrayList<JLabel> Etiquetas = new ArrayList<JLabel>();

        Container contentPane = window.getContentPane();
        contentPane.setLayout(new FlowLayout());
        for (int i = 1; i < 5; i++) {
            JLabel etiqueta = t.etiquetas(i);
            Etiquetas.add(etiqueta);
            contentPane.add(etiqueta);
        }

        window.setVisible(true);





    }
}

public class main {

    public static void main(String[] args) {

        Facturas obj = new Facturas();
        new LaunchGuiComponent().Launch(obj);

    }
}



Te recomiendo que uses la clase ArrayList en vez de Vector (es una colección obsoleta).
Fíjate que el bucle debe empezar en 1 en vez de en 0, para que te aparezcan bien todas las etiquetas (en el método etiquetas, el primer valor es 1). Si usases el bucle que tu usases, tendrías que tener en cuenta que un array empieza con índice 0 y restarle 1 al valor de i.

Te fijarás que uso getContentPane y añado los JLabel allí directamente. En las últimas versiones de Java, es indistinto utilizar el método add de JFrame y el método add del panel contenedor, pero no en versiones antiguas.

Con el método setLayout se fija el tipo de layout que quieres usar (yo he elegido FlowLayout, el más sencillo,, pero puedes usar el que desees).

Saludos y suerte,

Alejandro
#3
Tienes que usar punteros como bien has indicado.

Código (cpp) [Seleccionar]

class A
{
    int variable1;
    vector <B*> variableB;
}

class B
{
    int variable2;
    A  *variableA;
}



Tampoco es obligatorio (como has dicho) poner una referencia de la clase A a la clase B. Todo depende de para que se vaya a usar.

No se producen errores si usas punteros, pero sería imposible hacerlo sin punteros.