Toon posts:

[Java] Array / JTable probleem

Pagina: 1
Acties:

Onderwerpen


  • Anoniem: 410994
  • Registratie: Juni 2011
  • Niet online
Hallo,

Ik zit met een probleem waar ik al de hele dag mijn hoofd op loop te breken, heb al voorbeelden op youtube gekeken en op google gezocht maar ik kan niet deze specifieke situatie vinden.

Het gaat om de volgende java code:

code:
1
2
3
4
5
6
7
8
9
10
            rs = database.retriveData("SELECT * FROM product");

            while (rs.next()) {

                  Object[][] data = {
                       {rs.getString("name"), rs.getString("price"), rs.getString("picture")}
                   };
               
                   table = new JTable(data, columnNames);
            }


Uitleg: Ik stuur een sql query naar retriveData welke een ResultList terug geeft. Vervolgens ga ik met een iterator ieder object langs en deze wil ik toevoegen als array aan de array data en vervolgens aan de JTable toevoegen maar ik krijg alleen het laatste record uit de database te zien in JTable wat ook wel logisch is want hij maakt iedere loop een nieuw Object[][] data aan. Maar het probleem is dat als ik Object[][] data buiten de while loop declareer ik een foutmelding krijg dat data binnen de loop een illegal start of expression is.

De oplossing is vast niet moeilijk maar ik kom er gewoon niet uit, hopelijk kan iemand me helpen.

  • iBasch
  • Registratie: Februari 2009
  • Laatst online: 15:39
Java:
1
2
3
4
5
DefaultTableModel model = (DefaultTableModel) table.getModel();

while (rs.next()) {
    model.addRow(new Object[] { rs.getString("name"), rs.getString("price"), rs.getString("picture") });
}


Iets in die richting. Je voegt iets aan het model van je tabel toe, niet aan de tabel zelf.

[Voor 7% gewijzigd door iBasch op 15-06-2011 17:00. Reden: getModel() buiten de while]


  • Anoniem: 410994
  • Registratie: Juni 2011
  • Niet online
Ik krijg nu een null pointer exception helaas maar ik ga er morgen weer mee verder, vaak helpt het om even te stoppen en later weer verder te gaan want het helder nadenken wilt nu niet meer zo erg lukken. :P

  • spleethoven
  • Registratie: Oktober 2010
  • Laatst online: 16-05 07:57
moet database.retriveData niet database.retrieveData zijn? :)

  • iBasch
  • Registratie: Februari 2009
  • Laatst online: 15:39
Anoniem: 410994 schreef op woensdag 15 juni 2011 @ 17:29:
Ik krijg nu een null pointer exception helaas maar ik ga er morgen weer mee verder, vaak helpt het om even te stoppen en later weer verder te gaan want het helder nadenken wilt nu niet meer zo erg lukken. :P
Je tabel moet natuurlijk wel geïnitialiseerd zijn.

Zie hier voor een voorbeeld: http://www.exampledepot.c...wing.table/InsertRow.html

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 09-06 08:56

Dricus

ils sont fous, ces tweakers

Het lijkt me voor de TS nuttiger als we hem eerst op zijn fundamentele programmeerfouten wijzen dan om een alternatieve manier te noemen om hetzelfde resultaat te bereiken ;).

Besef je dat je in je while loop voor elk record in je ResultList een nieuwe Obect[][] en een nieuwe JTable aanmaakt? Dit strookt niet met de beschrijving die je geeft. Zowel de Object[][] als de JTable zul je buiten je while loop moeten instantiëren om het gewenste resultaat te bereiken.

Ook zul je de Object[][] array van tevoren moeten initialiseren om hem in de while loop te kunnen gebruiken. De Java compiler eist namelijk dat lokale variabelen geïnitialiseerd worden voordat je ze gebruikt.

Je komt dan uit op iets als dit:
Java:
1
2
3
4
5
6
7
8
9
10
11
rs = database.retriveData("SELECT * FROM product");

Object[][] data = new Object[rs.size()][];

int i = 0;
while (rs.next()) {
  data[i] = new Object[] { rs.getString("name"), rs.getString("price"), rs.getString("picture") };
  i++;
}

table = new JTable(data, columnNames);

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


  • Anoniem: 410994
  • Registratie: Juni 2011
  • Niet online
Dricus, daar was ik mij van bewust, het stukje code wat ik gaf zat ongelukkig in elkaar door al het gepruts, toch bedankt voor het advies. :)

iBasch, hartstikke bedankt voor het voorbeeld, ik heb gisteravond nog eens het voorbeeld bekeken en dat maakte mij een hoop duidelijker, 10 minuten later had ik het ook werkend!

Voor de geïnteresseerde (mocht ooit eens iemand tegen hetzelfde probleem lopen), hiermee heb ik het werkend gekregen (meteen even de spelfout in retrieve aangepast. :P ):

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public void createTable(){
        DefaultTableModel model = new DefaultTableModel();
        JTable table = new JTable(model);

        try {
            rs = database.retrieveData("SELECT * FROM product");

            model.addColumn("product_number");
            model.addColumn("production_cost");
            model.addColumn("Product_image");
            model.addColumn("product_name");

            while (rs.next()) {
                model.addRow(new Object[] { 
                     rs.getString("product_number"), 
                     rs.getString("production_cost"), 
                     rs.getString("Product_image"),
                     rs.getString("product_name") 
                 });
             }

        } catch (Exception ex) {
            Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
        }

        table.setPreferredScrollableViewportSize(new Dimension(500, 350));
        table.setFillsViewportHeight(true);

        JScrollPane scrollpane = new JScrollPane(table);
        add(scrollpane);
}

[Voor 3% gewijzigd door Anoniem: 410994 op 16-06-2011 15:01]

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee