[Java] Array / JTable probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 410994

Topicstarter
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.

Acties:
  • 0 Henk 'm!

  • iBasch
  • Registratie: Februari 2009
  • Laatst online: 01-06 20:33
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 ]


Acties:
  • 0 Henk 'm!

Anoniem: 410994

Topicstarter
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

Acties:
  • 0 Henk 'm!

  • spleethoven
  • Registratie: Oktober 2010
  • Laatst online: 24-01-2024
moet database.retriveData niet database.retrieveData zijn? :)

Acties:
  • 0 Henk 'm!

  • iBasch
  • Registratie: Februari 2009
  • Laatst online: 01-06 20:33
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

Acties:
  • 0 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 17:03

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...


Acties:
  • 0 Henk 'm!

Anoniem: 410994

Topicstarter
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