Avatar billede sirsingelton Nybegynder
17. juli 2007 - 21:11 Der er 12 kommentarer og
1 løsning

Dynamisk tildeling af variabelnavne

Hej...

Jeg har 8 JTextFields (jTextFieldNr0 - jtextFieldNr7).
Jeg skal nu ha en et String array til at pege på hver af disse felters indhold hved hjælp af en for-løkke

Noget i stil med:

String[] antal = new antal[8];

for(i = 0; i < antal.length ; i++)
{
  antal[i] = (jTextFieldNr + i).getText()
}

0-tallet frem til 7-tallet bagefter jTextField skal på én eller anden måde kædes på jTextField, samtidig med at den forbliver et variabel.

Har prøvet at caste en streng til en JTextField component uden held som følgende:

for (int i = 0; i < antal.length; i++)
{     
  antal[i] = ((JTextField)("jTextFieldAntal"+i)).getText();
}

Tak for hjælpen!!
Avatar billede mikkelbm Nybegynder
17. juli 2007 - 21:14 #1
Det kan du ikke... Men hvorfor ikke smide dine textfields i et array også?
Avatar billede arne_v Ekspert
17. juli 2007 - 21:33 #2
Enten smide dem i et array eller iterere over components og teste paa navn. Men array
er langt hurtigere.
Avatar billede sirsingelton Nybegynder
17. juli 2007 - 22:20 #3
Jeg smider dem i et array...tak for det
...smid et svar
Avatar billede sirsingelton Nybegynder
17. juli 2007 - 23:08 #4
apropos...hvis jeg skal smide dem i et array v.h.a. en for-løkke

Kunne tænke mig det så sådan cirka ud:

    JTextField[] antal = data.getAntal();
    for (int i = 0; i < antal.length; i++)
    { 
      antal[i] = (JTextField)getComponent(i); //eller getComponentat(70, i*15)
    }

I javadoc'en står der ved metoden getComponent(int n):

"Gets the nth component in this container"

Hvordan finder jeg hvilken index componenterne er lagt i containeren...?
Avatar billede mikkelbm Nybegynder
17. juli 2007 - 23:13 #5
De ligger i den rækkefølge som de er lagt deri. Men din container kan jo også indeholde mange andre controls, så derfor synes jeg ikke om den metode. Hvis du kender navnene på dine textfields, kan du gøre som Arne foreslår, men jeg mener ikke du vinder noget ved det.

Hvad er det du helt præcis gerne vil opnå med det her? Det lyder lidt som om noget af ansvaret skal fordeles lidt ud.
Avatar billede sirsingelton Nybegynder
17. juli 2007 - 23:16 #6
Jeg skal ha ladt indholdet af en masse textfelter over i et array...eller lade arrayet pege på dem du ved.

Jeg kan gøre det enkeltvis, men ønsker egentlig bare at skære ned i koden og lade en for-løkke klare det.
Avatar billede mikkelbm Nybegynder
17. juli 2007 - 23:24 #7
Hvis du har et panel der kun indeholder JTextFields, kan du gøre noget a la:


ArrayList<String> values = new ArrayList<String>();
for (JTextField textfield : panel.getComponents())
{
  values.add(textfield.getText());
}

eller (hvis der muligvis ligger andre components):

ArrayList<String> values = new ArrayList<String>();
for (Component component : panel.getComponents())
{
  if (component instanceof JTextField)
      values.add(((JTextField)component).getText());
}
Avatar billede sirsingelton Nybegynder
18. juli 2007 - 01:01 #8
Hej Mikkel

Dit eksempel kunne ikke lade sig gøre da getComponents returnerer et Component[] og dette ikke kunne castes til JTextField...ifølge min stacktrace

Har istedet lavet følgende:

    Component[] antal = jPanelAntal.getComponents();
    data.setAntal(antal);

og når jeg skal hente dem igen:

    Component[] antal = data.getAntal();;
    int i = 0;
    for (int j = 0; j < antal.length; j++)
    {
  ((JTextField)jPanelAntal.getComponent(j)).setText(((JTextField)antal[j]).getText());
    }
Avatar billede sirsingelton Nybegynder
18. juli 2007 - 01:02 #9
Dette virker, men send et svar alligevel...du fik mig trods alt på rette vej
:)
Avatar billede sirsingelton Nybegynder
18. juli 2007 - 01:07 #10
int i = 0; er selvfølgelig overflødelig
Avatar billede mikkelbm Nybegynder
18. juli 2007 - 07:52 #11
Nåh okay. Men det sidste af mine to eksempler burde da virke - for det jo mere eller mindre det samme du gør :)
Avatar billede mikkelbm Nybegynder
18. juli 2007 - 07:54 #12
Og et svar...

Du kan jo dele points mellem Arne og jeg, da det jo trods alt var ham der kom med forslaget først.
Avatar billede sirsingelton Nybegynder
18. juli 2007 - 11:16 #13
Hvis Arne svarer, så må han få ellers må han ...
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