[Java] Variabele aan TableModel meegeven, hoe?

Pagina: 1
Acties:

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik heb een JTable in een formulier zitten, nu wil ik deze opmaken middels een TableModel, Dit is gelukt (Met statische data dus voorgedefinieerd).

Nu wil ik graag deze Table vullen met MySQL data. Deze connectie is bekend en geef ik via de aanroeping naar de TableModel mee. Dmv de volgende regel:

MyTableModel model = new MyTableModel(conn);

conn is de connectie.

Nu gaat deze naar de TableModel, alleen word deze hier niet zomaar geaccepteerd. Ik heb hem nu in een constructor, alleen update die de global niet, terwijl als ik er een functie bij aanroep en dan de connectie meegeef deze wel een positieve waarde geeft, hetgeen betekent dat de constructor wle uitgevoerd word alleen dat de global niet geupdate word!

Stukje van de code:

Java:
1
2
3
4
5
6
7
8
9
10
11
import javax.swing.table.AbstractTableModel;
import java.sql.Connection;

class MyTableModel extends AbstractTableModel
{
  Connection conn;

  MyTableModel(Connection verbinding)
    {
      conn = verbinding;
  }


Dit geeft geen foutmelding, alleen als ik hierna dan in een stukkie code de volgende regel zet:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
public String checkConnection()
    {
        
        if(conn == null)
        {
          return "Geen connectie!";
        }
        else
        {
          return "Verbonden...";
    }
    }


En ergens anders:

System.out.println(checkConnection());

Dan zegd hij gewoon geen connectie. Ik doe het waarschijnlijk verkeerd, normaal deed ik het via een method, alleen kan dat hier niet zoals ik wil.

Normaal zou je de constructor dus aanroepen met constructor naam = new constructor();

en dan kun je de variabele gebruiken door naam.variabele. Alleen nu staat er dus als een ontvangen variabele!

[ Voor 8% gewijzigd door BSeB op 19-10-2004 12:47 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:05

Janoz

Moderator Devschuur®

!litemod

Waarom implementeer je database code in je GUI components? Waarom haal je je database code niet los van je presentatie code? Sorry, eventje niet zo heel goed gelezen :D. Maar blijft iig staan waarom je een abstract table model gaat extenden. Het lijkt mij veel logischer om de TableModel interface te implementeren op je data access component.

[ Voor 52% gewijzigd door Janoz op 19-10-2004 12:52 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Hmz, ik zou inderdaad in de dac mijn gegevens kunnen ophalen en dan doorgeven aan de TableModel (Hier moet die uiteindelijk inde JTable gezet worden).

Maar dan is het probleem hetzelfde. Hoe kan ik deze dan als global krijgen. In mijn TableModel

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:40

Robtimus

me Robtimus no like you

Klopt de waarde van conn wel voordat je die meegeeft aan de constructor?

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Jha, want als ik de volgende regel aan de constructor meegeef:

Java:
1
2
3
4
5
MyTableModel(Connection verbinding)
    {
      conn=verbinding;
System.out.println(checkConnection);  
}

Java:
1
2
3
4
5
6
7
8
9
10
11
public String checkConnection(Connection verbinding)
    {
        if(conn == null)
        {
          return "Geen connectie!";
        }
        else
        {
          return "Verbonden...";
    }
    }


Dan word er netjes de melding verbonden weergegeven!

[/code]

Verwijderd

wat IceManX waarschijnlijk bedoeld:
Geef je wel een Connection mee aan je constructor, of geef je null mee? Controleer dat eens.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
IceManX schreef op 19 oktober 2004 @ 13:18:
Klopt de waarde van conn wel voordat je die meegeeft aan de constructor?
De waarde van de constructor is al bepaald toch, omdat ik die vanaf de methode meegeef. Dmv:

MyTableModel model = new MyTableModel(conn);

Daarmee gooi ik de connectie naar de TableModel. In TableModel word deze door de constructor opgevangen. Alleen zou ik niet weten hoe ik de constructor moet laten uitvoeren dan, omdat als ik de constructor ga aanroepen met:

Constructor naam = new Constructor(weet ik veel)

dit niet gaat werken, omdat in deze class waar de constructor in zit nog geen "weet ik veel" bekend is. Dus als ik die meegeef, dan krijg ik een error.

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 12-05 15:26

Eelke Spaak

- Vlad -

BSeB schreef op 19 oktober 2004 @ 14:17:
[...]


De waarde van de constructor is al bepaald toch, omdat ik die vanaf de methode meegeef. Dmv:

MyTableModel model = new MyTableModel(conn);

Daarmee gooi ik de connectie naar de TableModel. In TableModel word deze door de constructor opgevangen. Alleen zou ik niet weten hoe ik de constructor moet laten uitvoeren dan, omdat als ik de constructor ga aanroepen met:

Constructor naam = new Constructor(weet ik veel)

dit niet gaat werken, omdat in deze class waar de constructor in zit nog geen "weet ik veel" bekend is. Dus als ik die meegeef, dan krijg ik een error.
Euhm, zodra je de klasse instantieert wordt de constructor uitgevoerd. De vraag is: welk argument geef je mee aan die constructor? Met andere woorden: wat is de waarde van conn in de aanroep

Java:
1
MyTableModel model = new MyTableModel(conn);


?

TheStreme - Share anything with anyone


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Eelke Spaak schreef op 19 oktober 2004 @ 14:28:
[...]

Euhm, zodra je de klasse instantieert wordt de constructor uitgevoerd. De vraag is: welk argument geef je mee aan die constructor? Met andere woorden: wat is de waarde van conn in de aanroep

Java:
1
MyTableModel model = new MyTableModel(conn);


?
die conn is de Connectie. Welke gewoon werkend is. Het probleem zit hem dus eht pas in de classe TableModel

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 12-05 15:26

Eelke Spaak

- Vlad -

BSeB schreef op 19 oktober 2004 @ 14:47:
[...]


die conn is de Connectie. Welke gewoon werkend is. Het probleem zit hem dus eht pas in de classe TableModel
Geef even de code waarmee je conn initialiseert; de foutmelding duidt er toch echt op dat conn naar null verwijst.

De constructor van je TableModel is namelijk wel in orde.

TheStreme - Share anything with anyone


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik neem aan dat je geloofd dat de connectie door bovenstaande regel dat de connectie dir doorgegeven daadwerkelijk een connectie is. Dus niet null. Mijn tablemodel is als volgt. (Redelijk basic, maar meer is in dit geval niet nodig.)

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import javax.swing.table.AbstractTableModel;
import java.sql.Connection;

class MyTableModel extends AbstractTableModel
{
  Connection conn;

  MyTableModel(Connection verbinding)
    {
      conn=verbinding;
  }

    private boolean DEBUG = false;

  private String[] columnNames = kolomnaam();

    private String[] kolomnaam()
    {
      String[] kolommetje = {"Sub-Artikelnummer","Artikel Omschrijving","Ondergrens","Actuele Voorraad"};
        return kolommetje;
    }

    private Object[][] data = rijdata();

  private Object[][] rijdata()
  {
        Object[][] rijtjes = {
            {"8-S18000A", "Campione",
             "Snowboarding", new Integer(5)},
            {"8-S18001A", "Huml",
             "Rowing", new Integer(3)},
            {"8-S18002A", "Walrath",
             "Knitting", new Integer(2)},
            {"8-S18003A", "Zakhour",
             "Speed reading", new Integer(20)},
            {"8-S18004A", "Milne",
             "Pool", new Integer(10)}
        };
        return rijtjes;
  }

  public int getColumnCount()
    {
      return columnNames.length;
  }

  public int getRowCount() 
    {
    return data.length;
  }

  public String getColumnName(int col)
    {
    return columnNames[col];
  }

  public Object getValueAt(int row, int col)
    {
    return data[row][col];
  }

  public Class getColumnClass(int c)
    {
      return getValueAt(0, c).getClass();
  }

  public boolean isCellEditable(int row, int col)
    {
        return false;
  }

  public void setValueAt(Object value, int row, int col)
    {
      if (DEBUG)
        {
          System.out.println("Setting value at " + row + "," + col + " to " + value + " (an instance of " + value.getClass() + ")");
    }

    data[row][col] = value;
    fireTableCellUpdated(row, col);

    if (DEBUG)
        {
          System.out.println("New value of data:");
      printDebugData();
    }
  }

  private void printDebugData() 
    {
      int numRows = getRowCount();
    int numCols = getColumnCount();

    for (int i=0; i < numRows; i++) 
        {
          System.out.print("    row " + i + ":");
      for (int j=0; j < numCols; j++) 
            {
        System.out.print("  " + data[i][j]);
      }
      System.out.println();
    }
    System.out.println("--------------------------");
  }
}

Verwijderd

Wellicht dat je connectie, wat in feite een pointer is naar een connectie-object, later in een andere klasse overschreven wordt met null.
Hoe je dingen ook doorgeeft en doorpassed, het blijft gewoon hetzelfde object. Dus ook al heb je een connectie, kan het prima dat je die connectie in de klasse waar hij oorspronkelijk vandaan komt weer overschrijft.

Heb je die connectie overigens echt nodig in je TableModel? Persoonlijk zou ik in de tablemodel gewoon data stoppen en data lezen en zou ik een andere klasse maken voor de interactie tussen de database en de tablemodel.

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

BSeB schreef op 20 oktober 2004 @ 08:27:
Ik neem aan dat je geloofd dat de connectie door bovenstaande regel dat de connectie dir doorgegeven daadwerkelijk een connectie is. Dus niet null.
Wijze les:

Assumption is the mother of all fuck-ups

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
jAnO! schreef op 20 oktober 2004 @ 09:59:
[...]


Wijze les:

Assumption is the mother of all fuck-ups
LoL :P , waarom kan ik dan wel als ik binnen die constructor een Connection test zet wel zien dat er een verbinding is!?

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

BSeB schreef op 20 oktober 2004 @ 10:02:

LoL :P , waarom kan ik dan wel als ik binnen die constructor een Connection test zet wel zien dat er een verbinding is!?
Ik zou in die constructor rechtsreeks een methode op conn aanroepen, ipv je eigen checker..

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:40

Robtimus

me Robtimus no like you

BSeB schreef op 20 oktober 2004 @ 08:27:
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
private String[] columnNames = kolomnaam();

private String[] kolomnaam()
{
    String[] kolommetje =
        {"Sub-Artikelnummer","Artikel Omschrijving","Ondergrens","Actuele Voorraad"};
    return kolommetje;
}

private Object[][] data = rijdata();

private Object[][] rijdata()
{
    Object[][] rijtjes = {
            {"8-S18000A", "Campione",
             "Snowboarding", new Integer(5)},
            {"8-S18001A", "Huml",
             "Rowing", new Integer(3)},
            {"8-S18002A", "Walrath",
             "Knitting", new Integer(2)},
            {"8-S18003A", "Zakhour",
             "Speed reading", new Integer(20)},
            {"8-S18004A", "Milne",
             "Pool", new Integer(10)}
    };
    return rijtjes;
}
Waarom niet gewoon direct assignen, ipv die onnodige functie calls?
Java:
1
2
3
4
5
6
7
8
9
10
private String[] columnNames =
    {"Sub-Artikelnummer","Artikel Omschrijving","Ondergrens","Actuele Voorraad"};

private Object[][] data = 
    {{"8-S18000A", "Campione", "Snowboarding", new Integer(5)},
      {"8-S18001A", "Huml", "Rowing", new Integer(3)},
      {"8-S18002A", "Walrath", "Knitting", new Integer(2)},
      {"8-S18003A", "Zakhour", "Speed reading", new Integer(20)},
      {"8-S18004A", "Milne", "Pool", new Integer(10)}
    };
Verwijderd schreef op 20 oktober 2004 @ 09:14:
Wellicht dat je connectie, wat in feite een pointer is naar een connectie-object, later in een andere klasse overschreven wordt met null.
Hoe je dingen ook doorgeeft en doorpassed, het blijft gewoon hetzelfde object. Dus ook al heb je een connectie, kan het prima dat je die connectie in de klasse waar hij oorspronkelijk vandaan komt weer overschrijft.
Dat maakt niets uit, de andere reference naar de connectie verandert. Deze reference zou dus gewoon nog moeten bestaan, dus het object zelf ook. De enige manier waarop conn null kan worden nadat er een geldig object aan is geassigned is door de statement conn = null; (aangezien het model object bestaat en conn een field is bestaat deze reference nog).
Pas als dat voor alle references gebeurt (of ze worden null, of ze zijn out of scope) wordt het object pas echt opgeruimd.

Object references worden by value doorgegeven, niet bij reference. Daarom heeft de volgende code ook totaal geen zin:
Java:
1
2
3
4
5
6
public void swap(Object a, Object b)
{
    Object temp = a;
    a = b;
    b = temp;
}
De lokale references a en b worden wel geswapped, maar de references waarmee swap wordt aangeroepen blijven exact hetzelfde.
Heb je die connectie overigens echt nodig in je TableModel? Persoonlijk zou ik in de tablemodel gewoon data stoppen en data lezen en zou ik een andere klasse maken voor de interactie tussen de database en de tablemodel.
Mee eens.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

jAnO! schreef op 20 oktober 2004 @ 09:59:
[...]


Wijze les:

Assumption is the mother of all fuck-ups
Het meest frusterende van programmeren is dat alles wat niet werkt, ook nog komt omdat je dat zelf zo geprogrammeerd hebt :D
(Java Layoutmanagers uitgezonderd (echt waar))

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

Verwijderd schreef op 20 oktober 2004 @ 10:24:
[...]

Het meest frusterende van programmeren is dat alles wat niet werkt, ook nog komt omdat je dat zelf zo geprogrammeerd hebt :D
(Java Layoutmanagers uitgezonderd (echt waar))
Was dat maar waar, hele topic's vol over nachtmerries cq. collega's!

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Verwijderd schreef op 20 oktober 2004 @ 10:24:
[...]

Het meest frusterende van programmeren is dat alles wat niet werkt, ook nog komt omdat je dat zelf zo geprogrammeerd hebt :D
(Java Layoutmanagers uitgezonderd (echt waar))
Mee eens, vooral dat van LayOutManagers :P

Maar goed, ik kan wel mijn data via een andere method ophalen en dan hierin stoppen. Maar dan heb ik eigenlijk hetzelfde probleem toch.

Want hoe moet ik dan de statement data in de TableModel vullen?

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:40

Robtimus

me Robtimus no like you

Een DefaultTableModel gaan gebruiken, en dan voornamelijk de addRow()/insertRow() methods?

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Natuurlijk, dat is idd veel netter. Ik had nog niet op die manier erna gekeken.

Ik moet zoals ik zie dan de regel die de data bevat modificeren:

private Object[][] data = new String[];

Alleen dit kan natuurlijk niet.

terwijl als ik er een object van maak zou het zo moeten, nog iets fout I know moet nog even uitvinden hoe het moet:

private Object[][] data = new Object[];

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:40

Robtimus

me Robtimus no like you

Wat probeer je daar te doen? Dat gaat nooit goed he?

2 fouten die je daar maakt:
  1. Je kan alleen maar een grotere dimensie toewijzen, niet een kleinere. Maw:
    Object[][] data = new Object[] mag niet, Object[] data = new Object[][] wel. In dat laatste geval is elk element uit data een array van Object.
  2. Je moet bij initialisatie van een array of de grootte opgeven, of meteen de inhoud, waarna de grootte de grootte van de inhoud wordt .Dus of new Object[X], of new Object[] {X, Y, Z} (grootte wordt dan 3)

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

Het is jammer dat je blijft weigeren om eerst eens de basic's door te nemen...
imho is het een beetje nutteloos om al patchend je progsels in elkaar te hangen, uiteindelijk werkt het wel, maar vraag niet hoe.

Ik heb het al eerder gezegd, ga naar de boekhandel geef een eurotje of 60 uit aan een goed boek.

Succes! :Y)

(en nu doel ik op het feit dat je niet eens weet hoe je een multidimensionale array moet aanmaken, dat is meestal hoofdstuk 1 of 2)

offtopic:
Ik zit nu in India, voor een projectje en de boeken zijn hier te goedkoop!
Ik ga denk zwaar over de 20 kg bagage heen (zal wel wat kleren ditchen)... Heb al 5 O'reillys opgehaald.
Cookbook (nieuwste inc. Tiger) is hier 9 E. ofsow..

[ Voor 23% gewijzigd door jAnO! op 20-10-2004 12:27 ]

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
jAnO! schreef op 20 oktober 2004 @ 12:18:
Het is jammer dat je blijft weigeren om eerst eens de basic's door te nemen...
imho is het een beetje nutteloos om al patchend je progsels in elkaar te hangen, uiteindelijk werkt het wel, maar vraag niet hoe.

Ik heb het al eerder gezegd, ga naar de boekhandel geef een eurotje of 60 uit aan een goed boek.

Succes! :Y)

(en nu doel ik op het feit dat je niet eens weet hoe je een multidimensionale array moet aanmaken, dat is meestal hoofdstuk 1 of 2)

offtopic:
Ik zit nu in India, voor een projectje en de boeken zijn hier te goedkoop!
Ik ga denk zwaar over de 20 kg bagage heen (zal wel wat kleren ditchen)... Heb al 5 O'reillys opgehaald.
Cookbook (nieuwste inc. Tiger) is hier 9 E. ofsow..
Ik zei dat ik gewoon effe snel wat op papier gezet had, zonder er diep naar te kijken, er staat ook onder dat ik het nog even goed moest nakijken.

En ja ik weet dat ik een boek koop, heb namelijk thinking in java gekocht. En ik wil een boke over oop nog hebben.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
BSeB schreef op 20 oktober 2004 @ 11:46:
Natuurlijk, dat is idd veel netter. Ik had nog niet op die manier erna gekeken.

Ik moet zoals ik zie dan de regel die de data bevat modificeren:

private Object[][] data = new String[];

Alleen dit kan natuurlijk niet.

terwijl als ik er een object van maak zou het zo moeten, nog iets fout I know moet nog even uitvinden hoe het moet:

private Object[][] data = new Object[];
Het had natuurlijk dit moeten zijn:

private Object[][] data = new Object[0][4];

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

BSeB schreef op 20 oktober 2004 @ 12:38:
[...]


Ik zei dat ik gewoon effe snel wat op papier gezet had, zonder er diep naar te kijken, er staat ook onder dat ik het nog even goed moest nakijken.

En ja ik weet dat ik een boek koop, heb namelijk thinking in java gekocht. En ik wil een boke over oop nog hebben.
Ah ok, heb je de presentaties op de cdrom al bekeken?

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Sorry, heb hem online besteld, hij is dus nog niet binnen en aangezien ik overdag weg ben zla het waarschijnlijk pas komend weekend worden dat ik hem op het postkantoor kan halen. Bij mij in de buurt zitten namelijk geen winkels waar ze het boek op de plank hadden liggen.

Btw. Ik heb een bepaalde SQL query die ik wil gebruiken om mijn JTable dadelijk mee te vullen alleen word deze door Java niet goed uitgevoerd. Voor zover mijn kennis ervan reikt zou dit moeten kloppen in SQL:

Java:
1
2
3
String SELECT = "SELECT sub_product_beschrijving.sub_art_nummer sub_product_beschrijving.sub_beschrijving, sub_product_voorraad.[sub_onder], sub_product_voorraad.[sub_boven], sub_product_voorraad.[sub_actueel] ";
      String FROM = "FROM sub_product_beschrijving INNER JOIN (sub_product_voorraad INNER JOIN sub_product_tekeningen ON sub_product_voorraad.sub_art_nummer_vrd = sub_product_tekeningen.sub_art_nummer_tek) ON sub_product_beschrijving.sub_art_nummer = sub_product_voorraad.sub_art_nummer_vrd ";
      String WHERE = "WHERE (((sub_product_beschrijving.sub_art_nummer)= '8-S18001A'))";


Tenminste deze code als SQL geschreven werkte wel altijd binnen Acces. En SQL is redelijk consistent dus dit zou moeten werken neem ik aan.

[ Voor 65% gewijzigd door BSeB op 20-10-2004 13:22 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:40

Robtimus

me Robtimus no like you

BSeB schreef op 20 oktober 2004 @ 12:44:
Het had natuurlijk dit moeten zijn:

private Object[][] data = new Object[0][4];
Je hebt dus een array met 0 arrays met elk 4 objecten. Da's zinvol ;)

[ Voor 4% gewijzigd door Robtimus op 20-10-2004 13:50 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Het ging even om het idee, uiteindelijk kan dit toch niet werken, omdat het aantal rijen wat ingevoegd moet worden nooit hetzelfde is. Het kan wijzigen.

Dan kan ik deze maneir nooit gebruiken. Ik vraag me dus nu af wat ik nu moet. Ik ben aan het kijken bij een TableModelListener. Alleen is het zo dat ik 1 keer de hele set data kan creeeren. Dus 1 array[][] die alle info bevat, dat is het probleem niet. Het probleem is wel dat ik dus niet weet hoe ik die in mijn tablemodel moet krijgen. Daarom las ik iets over een tablelistener, Maar dat is meer iets als je maar 1 record erbij wil zetten.

Dus eigenlijk is die TableModelListener niet wat ik zoek. Het liefst zou ik gewoon een Array aan tablemodel doorgeven. Dat is lekker makkelijk. Alleen dan moet ik dus weten hoe ik deze daarin kan krijgen. Er hoeft namelijk geen update te worden uitgevoerd om te kijken of er een record is toegevoegd, want dat gebeurd namelijk niet. Niet hier iig.

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

IceManX schreef op 20 oktober 2004 @ 13:49:
[...]
Je hebt dus een array met 0 arrays met elk 4 objecten. Da's zinvol ;)
grinnik, ik dacht nog, ik zeg niks... ;)

Compiler valt er niet over trouwens, is er een toepassing voor arrays met nul elementen? :?

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


Verwijderd

Je kan ook een vector maken met daarin steeds String[] objecten.
vector.add({"colomnaam", "data"});
of twee vectoren, een columnvector en een datavector waarbij de datavectorgrootte een factor van de columvectorgrootte is.

Dan maak je gewoon een methode fillTable(Vector data), of fillTable(Vector columns, Vector data) oid.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
jAnO! schreef op 20 oktober 2004 @ 14:00:
[...]


grinnik, ik dacht nog, ik zeg niks... ;)

Compiler valt er niet over trouwens, is er een toepassing voor arrays met nul elementen? :?
LOL, wat een schik 8)7

Btw heb ik hier iets aan:

Java:
1
2
3
4
5
6
private Vector     vector=null;

    public VariableListTableModel(Vector vector)
    {
        this.vector = vector;
    }


Als ik dan in mijn new Model de variabele vector meestuur dan word deze meteen meegenomen als data. Dit zou dus ook moeten kunnen als het een array zou zijn! Of mis ik nu een puntje.

Verwijderd

Zolang je de getValueAt(int, int) maar goed uitwerkt :)

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

Vector? ArrayList!

Maar on-topic hoe staat het nu met je connectie?

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
OK, ik heb dus besloten om mijn gegevens in een aparte method te proppen, misschien apparte class, maar dat ligt een beetje aan de overzichtelijkheid van mijn pagina.

Daar wil ik een Vector in creeren die array's bevat. Ik kies voor vector, omdat deze mogelijkheid heeft om er steeds een nieuwe bij te zetten ipv een array waar je ineens de complete array moet maken.
In deze method word de connectie gebruikt, dus dat probleem is opgelost. Ik moet nu alleen nog uitvinden hoe ik precies die Vector die terugkomt van de method meegeef aan de TableModel, en dat is eigenlijk hetzelfde verhaal als bij de connectie.

Hoe zorg ik ervoor dat de vector in tablemodel opgenomen word?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:05

Janoz

Moderator Devschuur®

!litemod

array is niet hetzelfde als ArrayList. Sun raad sinds het nieuwe collections framework aan om ArrayList te gebruiken ipv Vector.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
// Stond zinnigheid, nu niet meer, effe arraylist bekijken

[ Voor 92% gewijzigd door BSeB op 20-10-2004 14:55 ]


Verwijderd

Ik zei wel Vector, want een Vector is wel makkelijk en werkt allemaal wel goed en is over het algemeen ook wel het meest bekend, maar kijk eerst even naar wat er nog meer in de java.util zit.
Zo heb je nog de sets (HashSet), of de ArrayList (die je soms met Iterators moet benaderen ipv direct).
De vector is namelijk oud en een beetje traag.

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
public class MyTableModel extends AbstractTableModel{
  private Vector data;
  
  public MyTableModel(){
    data = null;
  }
  
  public MyTableModel(Vector data){
    this.data = data;
  }

  public Object getValueAt(int _row, int _column){
    //schrijf het hier zo dat je die vector doorloopt en daar de juiste object uit kan halen
    return antwoord;
  }

  public getRowCount(){
    //deze wordt dan ook nog even tricky als je één vector gebruikt ipv twee
  }
   
  public getColumnCount(){
    //en deze ook
  }
}


Je kan natuurlijk ook nog een vector in een vector plaatsen (of een arraylist in een arraylist).
of het volgende:
code:
1
new MyTableModle({new String("CollumnName"), bijbehorendeDataVector});

Dat maakt de implementatie iig wat makkelijker.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Even een klein testje geschreven om te kijken of ik snap hoe ArrayLists werken:

Java:
1
2
3
4
5
6
7
8
String blaat[] = {"bla","1","2","3"};
          String blaar[] = {"blas","11","22","33"};
          ArrayList ikke = new ArrayList();
          ikke.add(1,blaat);
          ikke.add(2,blaar);
          int index = 1;
          Object uitkomst[] = ikke.get(index);
          System.out.println(uitkomst.toString());


Alleen nu krijg ik een error:

F:\bar\Application1\OpboekenAfboeken.java:554: incompatible types
found : java.lang.Object
required: java.lang.Object[]
Object uitkomst[] = ikke.get(index);
^
Dus ik doe iets fout, snap alleen niet helemaal wat, omdat ik er Array's in duw en er dus ook een enkele array uit zou moeten halen op deze manier.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:05

Janoz

Moderator Devschuur®

!litemod

Ik denk toch echt dat het heel nodig tijd wordt dat je dat boek nu eens krijgt. Sowieso is de foutmelding redelijk duidelijk. Hij vindt een Object, maar verwacht een Object[]. Dit valt gewoon onder de parse errors.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Ik zou het in ieder geval als volgt doen:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//blaat is een stringarray object
String[] blaat = {"bla","1","2","3"};
//zo ook blaar
String[] blaar = {"blas","11","22","33"};
ArrayList ikke = new ArrayList();
//de eerste index is altijd nog 0, maar gewoon weglaten zou ook wel moeten werken
ikke.add(blaat);
ikke.add(blaar);

String[] uitkomst;
//vanaf 0 beginnen te tellen
for(int index = 0; index < ikke.size(); index++){
  //je krijgt er altijd objecten uit idd, cast dat gewoon direct naar wat je wil hebben
  uitkomst = (String[])ikke.get(index);
  for(int i = 0; i < uitkomst.lenth; i++){
    System.out.println(uitkomst[i]);
  }
}


Even om verwarring te voorkomen. Een Object[] is op zijn beurt ook weer een Object. Als dat Object eigenlijk een Object[] is, dan zou je dus ook dat weer moeten casten naar een Object[]. Maar het is dan dus makkelijker om direct te casten naar een String[]

[ Voor 23% gewijzigd door Verwijderd op 20-10-2004 15:15 ]


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Janoz schreef op 20 oktober 2004 @ 15:13:
Ik denk toch echt dat het heel nodig tijd wordt dat je dat boek nu eens krijgt. Sowieso is de foutmelding redelijk duidelijk. Hij vindt een Object, maar verwacht een Object[]. Dit valt gewoon onder de parse errors.
Ik zei al komend weekend heb ik dat mooie boekje. Ben best benieuwd:D

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Verwijderd schreef op 20 oktober 2004 @ 15:14:
Ik zou het in ieder geval als volgt doen:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//blaat is een stringarray object
String[] blaat = {"bla","1","2","3"};
//zo ook blaar
String[] blaar = {"blas","11","22","33"};
ArrayList ikke = new ArrayList();
//de eerste index is altijd nog 0, maar gewoon weglaten zou ook wel moeten werken
ikke.add(blaat);
ikke.add(blaar);

String[] uitkomst;
//vanaf 0 beginnen te tellen
for(int index = 0; index < ikke.size(); index++){
  //je krijgt er altijd objecten uit idd, cast dat gewoon direct naar wat je wil hebben
  uitkomst = (String[])ikke.get(index);
  for(int i = 0; i < uitkomst.lenth; i++){
    System.out.println(uitkomst[i]);
  }
}


Even om verwarring te voorkomen. Een Object[] is op zijn beurt ook weer een Object. Als dat Object eigenlijk een Object[] is, dan zou je dus ook dat weer moeten casten naar een Object[]. Maar het is dan dus makkelijker om direct te casten naar een String[]
Ik zie het idd, (String[]) dit had ik niet. Dat was de foutmelding.

Verwijderd

^^ Ga na dat (Object[]) dus ook had gekund in jouw code om van die foutmelding af te komen, al weet ik niet zeker of je dan ook van die mooie printouts had kunnen maken :)
BSeB schreef op 20 oktober 2004 @ 15:16:
[...]


Ik zei al komend weekend heb ik dat mooie boekje. Ben best benieuwd:D
Tot, maar ook na, die tijd, is de Java tutorial ook een heel handig naslagwerk :)

[ Voor 22% gewijzigd door Verwijderd op 20-10-2004 15:22 ]


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Verwijderd schreef op 20 oktober 2004 @ 14:58:
Ik zei wel Vector, want een Vector is wel makkelijk en werkt allemaal wel goed en is over het algemeen ook wel het meest bekend, maar kijk eerst even naar wat er nog meer in de java.util zit.
Zo heb je nog de sets (HashSet), of de ArrayList (die je soms met Iterators moet benaderen ipv direct).
De vector is namelijk oud en een beetje traag.

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
public class MyTableModel extends AbstractTableModel{
  private Vector data;
  
  public MyTableModel(){
    data = null;
  }
  
  public MyTableModel(Vector data){
    this.data = data;
  }

  public Object getValueAt(int _row, int _column){
    //schrijf het hier zo dat je die vector doorloopt en daar de juiste object uit kan halen
    return antwoord;
  }

  public getRowCount(){
    //deze wordt dan ook nog even tricky als je één vector gebruikt ipv twee
  }
   
  public getColumnCount(){
    //en deze ook
  }
}


Je kan natuurlijk ook nog een vector in een vector plaatsen (of een arraylist in een arraylist).
of het volgende:
code:
1
new MyTableModle({new String("CollumnName"), bijbehorendeDataVector});

Dat maakt de implementatie iig wat makkelijker.
Ik ben nu op deze manier bezig geweest. Eigenlijk best handig die arrayList, maar ik zit nu met een probleem. Ik heb het werkend voor de kolomnamen. Deze worden nu vanuit een andere method doorgegeven aan deze class.

Alleen voor de data loop ik vast. Ik krijg een ClassCastException. Dit is raar, omdat ik nu helemaal niet hoef te casten naar een andere soort, alles moet Object blijven.

Dit is de code die ik tot nu toe heb:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
private boolean DEBUG = false;

    private ArrayList columnNames;
    private ArrayList data;

  public MyTableModel()
    {
      columnNames = null;
      data = null;
    }

  public MyTableModel(ArrayList kolomnamen, ArrayList kolomgegevens)
    {
    this.columnNames = kolomnamen;
    this.data = kolomgegevens;
  }

    public int getRowCount()
    {
    return data.size();
  }

  
  public Object getValueAt(int row, int col)
    {
    Object[] uitkomst = (Object[])columnNames.get(row);
        Object uitkomst1 = uitkomst[col];
        return uitkomst1;
  }

  
  public boolean isCellEditable(int row, int col)
    {
        return false;
  }

  public void setValueAt(Object value, int row, int col)
    {
      if (DEBUG)
        {
          System.out.println("Setting value at " + row + "," + col + " to " + value + " (an instance of " + value.getClass() + ")");
    }

    Object[] uitkomst = (Object[])columnNames.get(row);
        value = uitkomst[col];

        fireTableCellUpdated(row, col);

    if (DEBUG)
        {
          System.out.println("New value of data:");
      printDebugData();
    }
  }


Zo zou het dan goed moeten zijn, blijkbaar niet anders zat ik niet met die foutmelding. Maar de lengte van mijn ArrayList word juist bepaald. Dus moet het zitten in het bepalen van de data uit de array's die in de arrayList zitten.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ok, mensen die in dit topic hebben gereageerd, wat ik wilde is gelukt, ik dank jullie daarom.

_/-\o_ _/-\o_

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:40

Robtimus

me Robtimus no like you

Zitten in columnNames wel arrays van Object? Denk persoonlijk van niet, en dat daar de fout zit. Want je cast op regels 26 en 44 wel degelijk, en die gaan beiden fout blijkbaar.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
IceManX schreef op 21 oktober 2004 @ 10:27:
Zitten in columnNames wel arrays van Object? Denk persoonlijk van niet, en dat daar de fout zit. Want je cast op regels 26 en 44 wel degelijk, en die gaan beiden fout blijkbaar.
Klopt had bij het schrijven de verkeerde ArrayList genomen, daardoor kreeg ik een foutmelding terwijl de code dus verder goed was.

Had dat ook al veranderd. Dus het werkt nu en dat is wel lekker :) , komend weekend heb ik mijn boek en dan ga ik dat is even goed doornemen.
Pagina: 1