Avatar billede ostehamster Nybegynder
18. januar 2004 - 16:09 Der er 16 kommentarer og
2 løsninger

Lave en variabel, med navn som indholdet af en anden variabel?

Hejsa

Lidt kryptisk overskrift, men:

Jeg er ved at lave en mixer i java, den skal have en masse JSlides, og indholdet af hver JSlides, skal kunne skrive i en JTextField. Det er ikke så svært, men jeg vil gerne have 16 JSlides, og så bliver det altså ret meget kode, hvis jeg skal skrive kode for hvert sæt af JSlides og JTextField.

Jeg tænkte derfor, om man kan lave en JSlides, med navn udfra hvad der står i en variabel?

Hvis f.eks. variablen tal = 1, hvordan laver jeg så en JSlide der hedder fader1, hvis tal = 2, skal den så hede fader2.

Kan man evt. lave hver serie af JSlider og JTextField som forskellige objecter, eller bliver det noget rod med de grafiske?

mvh
Christoffer
Avatar billede riversen Nybegynder
18. januar 2004 - 16:16 #1
du kan evt. lave et arrays af JSlides
Avatar billede riversen Nybegynder
18. januar 2004 - 16:16 #2
altså noget ala JSlide[] fader = new JSlide[16]; og så fader[tal] for at få fat i den.
Avatar billede riversen Nybegynder
18. januar 2004 - 16:17 #3
eller fader[tal-1]
Avatar billede ostehamster Nybegynder
18. januar 2004 - 16:41 #4
Hmm, jeg kan ikke få lov til at adde den til containeren, min kode er:
// Java core packages
import java.awt.*;
import java.awt.event.*;

// Java extension packages
import javax.swing.*;
import javax.swing.event.*;

/**
*  Write a description of class GUI here.
*
*@author    (your name)
*@created    14. januar 2004
*@version    (a version number or a date)
*/


public class test extends JFrame {
    /**
    *  Constructor for objects of class test
    */

    // Selve det grafiske element
    private Container container;



    /**
    *  Constructor for the test object
    */
    public test() {

        // Vinduets titel
        super("CC DMX512 controller");

        // Laver container, opretter grid
        container = getContentPane();

        JSlider[] fader = new JSlider[16];
       
        container.add(fader[1]);
       
        setSize(400, 400);
        setVisible(true);
    }


}


Den compiler fint, men når jeg køre den, får jeg denne fejl:
NullPointerException:
null (in java.awt.Container)

Den er container.add(fader[1]); den ikke kan lide
Avatar billede ostehamster Nybegynder
18. januar 2004 - 16:41 #5
hmm, det skulle ikke være et svar
Avatar billede erikjacobsen Ekspert
18. januar 2004 - 16:55 #6
Dit fader array på 16 elementer har kun tomme pladser. Du skal også oprette
objekter i de pladser du vil bruge.
Avatar billede jakoba Nybegynder
18. januar 2004 - 16:55 #7
Beklager. Java er et kompileret sprog. alle variable SKAL have fået deres navne før programmet overhovedet begynder at eksekvere. Det er kun i scriptsprog (php, javascript) du sådan kan bruge sproget selv til at definere navne imens programmet kører.

Det nærmeste du nok kan komme det er med en hashtable hvor du bruger en streng som indeks til at genfinde de data der blev gemt med den nøgle.

import java.util.Hashtable;

    Hashtable ditLager = new Hashtable();

nu kan du gemme data med
    ditLager.put( "navn", (Object)dinedata );
        //NB: dine data skal indpakkes i en eller anden klasse

og hente dem igen med
    DinDataKlasse dineData = ditLager.get( "navn" );

mvh JakobA
Avatar billede jakoba Nybegynder
18. januar 2004 - 16:57 #8
Ups, jeg glemte den cast der er brug for :(
    DinDataKlasse dineData = (DinDataKlasse)ditLager.get( "navn" );
Avatar billede erikjacobsen Ekspert
18. januar 2004 - 16:59 #9
Og så skal din erklæring af JSlider[] fader være udenfor metoden, hvis du skal
gøre sig håb om at referere den andetsteds fra ;)
Avatar billede ostehamster Nybegynder
18. januar 2004 - 17:15 #10
Jeg bliver vidst aldrig god til det her java :)

Jeg prøver at rode lidt videre, og ser hvad der sker...
Avatar billede _carsten Nybegynder
18. januar 2004 - 18:09 #11
Alt afhængig af hvad du skal bruge, kan dette være løsningen

public class test extends JFrame {
    /**
    *  Constructor for objects of class test
    */

    // Selve det grafiske element
    private Container container;
    private JSlider[] fader;



    /**
    *  Constructor for the test object
    */
    public test() {

        // Vinduets titel
        super("CC DMX512 controller");

        // Laver container, opretter grid
        container = getContentPane();

        // set Layout på container
        container.setLayout(new java.awt.FlowLayout());

        fader = new JSlider[16];
       
        for(int i = 0; i < fader.length;i++){
            fader[i] = new JSlider();
            container.add(fader[i]);
        }
       
        setSize(400, 400);
        setVisible(true);
    }
}
Avatar billede ostehamster Nybegynder
12. marts 2004 - 22:43 #12
Lukker og slukker.

Takker for hjælpen, og undskyld den sene response.
Avatar billede _carsten Nybegynder
12. marts 2004 - 22:47 #13
Øhhhhhh - hvad blev så egentlig løsningen ???
Avatar billede ostehamster Nybegynder
12. marts 2004 - 22:50 #14
Jeg brugte det med et array af JSlider, men koden blev alt for omstændig, så jeg opgav lidt projektet.

Smidder du egentlig ikke lige et svar, for den kode du har tilføjet?
Avatar billede _carsten Nybegynder
12. marts 2004 - 22:51 #15
Jow - hvis du mener den ku' bruges
Avatar billede ostehamster Nybegynder
12. marts 2004 - 22:55 #16
Jeg mener jeg brugt det, inden jeg opgav.

Generelt synes jeg det er ret svært at finde ud af alle de der grafiske felter :)
Avatar billede _carsten Nybegynder
12. marts 2004 - 22:59 #17
Enig, det kan være en sej kamp at komme igennem, men sjovt når det lykkedes.

Så bare klø på!!
Avatar billede ostehamster Nybegynder
12. marts 2004 - 23:00 #18
Det vil jeg så prøve :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester