Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JAVA]Variable word niet bijgewerkt

Pagina: 1
Acties:
  • 364 views

  • pderaaij
  • Registratie: Oktober 2005
  • Laatst online: 18-08 20:16
Hallo,

Vermoedelijk gaat het weer om een simpel probleem, maar ik kom er zelf niet meer uit. Zit er nu al een tijdje op blind te staren. Het gaat om het volgende:

Ik heb een programma waar een JTable instaat. Als men een rij selecteert kan er daarna op een knop worden gedrukt en geef ik een recordID naar die functie toe die het hele record in DB ophaalt en een nieuwe scherm toont.

Hiervoor gebruik ik de volgende code:

code:
1
2
3
4
5
6
public TableListener tblListener;

public int getSelectedRecordID() {
        System.out.println(this.tblListener.getID());
        return this.tblListener.getID();
}


TableListener class
code:
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
public class TableListener implements ListSelectionListener {
        private int rid;
        
        public void valueChanged(ListSelectionEvent lsEvent) {
            if(lsEvent.getValueIsAdjusting()) {     
                ListSelectionModel lsm = (ListSelectionModel) lsEvent.getSource();

                if (lsm.isSelectionEmpty()) {
                    rid = 0;
                } else {
                    // Find out which indexes are selected.
                    int minIndex = lsm.getMinSelectionIndex();
                    int maxIndex = lsm.getMaxSelectionIndex();
                    for (int i = minIndex; i <= maxIndex; i++) {
                        if (lsm.isSelectedIndex(i)) {
                            rid = Integer.parseInt(tblRecords.getValueAt(i, 0).toString());
                            System.out.println(Integer.parseInt(tblRecords.getValueAt(i, 0).toString()));
                        }
                    }
                }
            }
        }
        
        public int getID() {
            System.out.println("RID: " + rid);
            return rid;
        }
    }


Als ik nu de eerste keer een record selecteert werkt het prima. De tweede keer word RID niet bijgewerkt en blijft de oude waarde staan. Terwijl in de console wel duidelijk blijkt dat de waarde wel goed opgezocht word door de getValueAt().

Ik zie inmiddels niet meer hoe ik dit kan oplossen, dus als iemand mij op het juiste spoor kan brengen dan graag!

Alvast bedankt!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:32
Ik zie niet direct wat er fout is en andere mensen blijkbaar ook niet, anders had je waarschijnlijk wel antwoord gehad nu. ;)

Ik heb het idee dat er iets niet helemaal klopt met wat je verteld. Kun je misschien op regel 17 nog iets toevoegen waarmee je de uitvoer kunt identificeren (dus bv. System.out.println("r17: " + ..);) en dan de uitvoer geven van wat er gebeurt als je het programma uitvoert zoals je beschreef? Als ik je goed begrijp zou je dan zoiets krijgen:
code:
1
2
3
4
5
6
r17: 123
RID: 123
123
r17: 456
RID: 123
123

Maar dat lijkt me met bovenstaande code erg sterk!

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik krijg het vermoeden dat je op een gegeven moment het ID uit een andere listener haalt dan degene die aan de JTable gekoppeld is. Daarnaast kun je je afvragen hoe zinnig het is zo'n waarde in een listener te hebben - doorgaans zorgt een listener ervoor dat die waarde die je ophaalt op de juiste plek terecht komt in je applicatie, ipv dat die plek waar je 'm nodig hebt moet querien van de listener.

[ Voor 50% gewijzigd door .oisyn op 05-04-2008 23:29 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • pderaaij
  • Registratie: Oktober 2005
  • Laatst online: 18-08 20:16
Hierbije wat aanpassingen in de console output zodat het wat duidelijker word

code:
code:
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
public class TableListener implements ListSelectionListener {
        private int rid;
        
        public void valueChanged(ListSelectionEvent lsEvent) {
            if(lsEvent.getValueIsAdjusting()) {     
                ListSelectionModel lsm = (ListSelectionModel) lsEvent.getSource();

                if (lsm.isSelectionEmpty()) {
                    rid = 0;
                } else {
                    // Find out which indexes are selected.
                    int minIndex = lsm.getMinSelectionIndex();
                    int maxIndex = lsm.getMaxSelectionIndex();
                    for (int i = minIndex; i <= maxIndex; i++) {
                        if (lsm.isSelectedIndex(i)) {
                            rid = Integer.parseInt(tblRecords.getValueAt(i, 0).toString());
                            System.out.println("Uit tabel:" + Integer.parseInt(tblRecords.getValueAt(i, 0).toString()));
                            System.out.println("RID in valueChanged" + rid);
                        }
                    }
                }
            }
        }
        
        public int getID() {
            System.out.println("RID: " + rid);
            return rid;
        }
    }


Output:
code:
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
Uit tabel:8
RID in valueChanged8
RID: 8
8
RID: 8
Show panel: 8
RID: 8
8
RID: 8
RID: 8
8
RID: 8
/* Hier word panel geopend & gesloten*/

/* selecteer nieuwe rij: */
Uit tabel:6
RID in valueChanged6
RID: 8
8
RID: 8
Show panel: 8
RID: 8
8
RID: 8
RID: 8
8
RID: 8


Heel de class staat online op: http://www.plaatscode.be/6481/

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-11 18:33
Je koppelt niet toevallig meerdere listeners of dezelfde listener meerdere keren aan je table?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Marcj
  • Registratie: November 2000
  • Laatst online: 16:12
Heb je al geprobeerd te debuggen met bijvoorbeeld Eclipse? Met dit soort tools kun de een 'watch' plaatsen op een variabele. Dat kun je zien waar deze variabele overal opnieuw veranderd wordt. Want ik denk dat je iets over het hoofd ziet...

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:48
Sorry hoor, maar een lap code posten met de vraag 'de output klopt niet, wat is er fout', is gewoon een verzoek aan anderen om jouw code te debuggen.
Ik stel voor dat je dat zelf eerst eens doet, ipv dat je er zit op blind te staren, anderen het debugwerk te laten doen.

Ik veronderstel dat je een IDE gebruikt om in te ontwikkelen. Iedere IDE heeft wel de nodige debug-tools (breakpoints, watches, ... ) die je kunnen helpen bij het zoeken naar jouw fout.

[ Voor 25% gewijzigd door whoami op 06-04-2008 12:48 ]

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.