Avatar billede krestenbanke Nybegynder
29. april 2004 - 16:27 Der er 11 kommentarer og
1 løsning

ArrayList skift til næste linie

Hejsa!

Kan man få en ArrayList til at skifte til en ny linie når der er lagt mere end x antal elementer i den?

ex:
{
ArrayList mitArray = new ArrayList();

mitArray.add("kjn");
mitArray.add("kjasd");
mitArray.add("oiuy");
mitArray.add("9876");

____

Skriver man ovenstående ud bliver det:

[kjn,kjasd,oiuy,9876]

kan det tilføjes ArrayList så det kommer til at stå:

[kjn,kjasd]
[oiuy,9876]

altså en "setsize" (int row, int col)
Avatar billede arne_v Ekspert
29. april 2004 - 16:34 #1
Nej.
Avatar billede arne_v Ekspert
29. april 2004 - 16:35 #2
Men du kan lave en wrapper klasse med en toString som gør det eller lave en
metode i en vilkårlig klassen som kan udskrive en ArrayList på den måde.
Avatar billede mikkelbm Nybegynder
29. april 2004 - 16:43 #3
For lige at følge lidt op på Arne et lille eksempel:

import java.util.*;

public class Test extends ArrayList
{
    private int col;
   
    public Test(int col)
    {
        this.col = col;
    }
   
    public String toString()
    {
        StringBuffer buf = new StringBuffer();
       
        for (int i = 1; i<this.size() + 1; i++)
        {   
            buf.append(this.get(i-1).toString()+",");
           
            if (i % col == 0)
                buf.append("\n");
        }
       
        return buf.toString();   
    }
   
    public static void main(String[] args)
    {
        Test list = new Test(3);
        for (int i = 0; i<20; i++)
            list.add("Test"+i);
        System.out.println (list);   
    }
}
Avatar billede mikkelbm Nybegynder
29. april 2004 - 16:45 #4
for (int i = 1; i<this.size() + 1; i++)
{   
    buf.append(this.get(i-1).toString()+",");
           
    if (i % col == 0)
    buf.append("\n");
}

bør nok være :

for (int i = 0; i<this.size(); i++)
{   
    buf.append(this.get(i).toString()+",");
           
    if ((i+1) % col == 0)
    buf.append("\n");
}

Det andet er vist noget rod :)
Avatar billede arne_v Ekspert
29. april 2004 - 16:48 #5
Jeg ville som sagt nok wrappe ArrayList og ikke extende den.

Men ellers er det måden at lave den toString på.
Avatar billede krestenbanke Nybegynder
29. april 2004 - 16:50 #6
hmm...
Det er fordi at indholdet skal videre til en tabel. Derfor var det lettest at lave get(row) get(col) hvis de stod som et koordinatsystem og ikke bare på en lang række.
Avatar billede krestenbanke Nybegynder
29. april 2004 - 17:07 #7
hvad er så det smarteste at lave??
Avatar billede arne_v Ekspert
29. april 2004 - 17:42 #8
Tabel ? Database eller GUI ?
Avatar billede krestenbanke Nybegynder
29. april 2004 - 17:46 #9
GUI, men skal senere også gemmes i en tabel i en sql, men den tager vi senere ;-)
Men det ville være smart hvis det var et format, der var umiddelbart kompatibel med begge dele.
Avatar billede arne_v Ekspert
29. april 2004 - 18:14 #10
Swing har jo nogle widgets til den slags f.eks. JTable.

Men til den skal du kunne udtrække en given kolonne og række, men
det kan du jo gøre direkte ud af ArrayList'en uden at konvertere til
String. Ja det er faktisk nemmere uden at konvertere til String.
Avatar billede krestenbanke Nybegynder
29. april 2004 - 18:57 #11
det er fra en JTable, med en TableModel jeg udtrækker værdierne, der bliver sat ind i tabellen.
Med:
public Object getValueAt(int row, int col) {
       
        return ((ArrayList)dataListe.get(row)).get(col);
}
problemmet er at de værdier, der bliver sat ind i tabellen bliver sat ind med:

    while (denneIterator.hasNext() == true) {
       
        ArrayList tempList = new ArrayList();
       
        Vare denneVare = (Vare)denneIterator.next();
       
        int vareNr = denneVare.getVareNr();
       
        String navn = denneVare.getNavn();
       
        String str = denneVare.getStr();
       
        double indPris = denneVare.getIndPris();
       
        double udPris = denneVare.getUdPris();
        int antal = denneVare.getAntal();
       
        tempList.add(""+vareNr);
        tempList.add(""+navn);
        tempList.add(""+str);
        tempList.add(""+indPris);
        tempList.add(""+udPris);
        tempList.add(""+antal);
   
        //System.out.println( "tempList "+tempList.toString());
       
        tabelModel.addVare(tempList);
    }

Så hvordan kan jeg "seperere" det jeg propper ind, således at det kommer ind i et format, der kan trækkes ud i tabellen?
Er jeg nødt til bruge en if-sætning på getValueAt, så jeg lægger een til row hver gang der er mere end 6 i ArrayListen?
Der må da være en lettere måde ikke??
Avatar billede krestenbanke Nybegynder
03. maj 2004 - 00:58 #12
hmm... ok...
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