Toon posts:

[java] Verander item in JList (swing) *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer een item in een JList (swing) te veranderen, dat doe ik als volgt:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
public void templateUpdateEvent(myTemplate mt){
    DefaultListModel dlm=(DefaultListModel)tbc.getData().getModel();
    for(int i=0;i<dlm.size();i++){
      myTemplate temp=(myTemplate)dlm.elementAt(i);
      if(temp.getId()==mt.getId()){
        myListModel mlm=tbc.getData().getModel();
        mlm.ContentsChanged(temp, i, i);

        break;
      }
    }
  }


De parameter "mt" is hier het object dat veranderd is. Het Model van een JList is MyListModel en bevat objecten van type myTemplate. Als ik het veranderde item gevonden heb roep ik ContentsChanged() aan van MyListModel, die dan een seintje stuurt naar de View van JList.

Hier is de code voor myListModel, erg simpel, is eigenlijk alleen bedoeld om de functie "fireContentsChanged" publiek te maken, want zonder deze functie is er geen mogelijkheid om een item in een JList te veranderen.

Java:
1
2
3
4
5
6
7
8
9
public class myListModel extends DefaultListModel {
  public myListModel() {
    super();
  }

  public void ContentsChanged(Object source, int index0, int index1){
    fireContentsChanged(source, index0, index1);
  }
}


Maar opeen of ander manier werkt het niet.

Java:
1
mlm.ContentsChanged(temp, i, i);


resulteert in een update van de JList View, maar alle items worden geupdate en dat is niet de bedoeling. Het is de bedoeling dat alleen de myTemplate die verandert is (de eerste parameter van ContentsChanged) word geupdate.

Heeft iemand enig idee wat hier fout kan zitten?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Java in de titel gezet, zoals vermeld in: P&W FAQ - De "quickstart"

Who is John Galt?


  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 13-08 20:56

jAnO!

lalalavanillevla

ik ben een beginner.. en ik probeer als oefening de code te doorgronden.. als ik het goed begrijp:
je vult dlm met elementen..
dan kijk je of het id. van elk element overeenkomt met het id van het element dat je hebt meegegeven aan de methode.
als dat zo is maak je mlm hetzelfde als dlm:

DefaultListModel dlm=(DefaultListModel)tbc.getData().getModel();
for(int i=0;i<dlm.size();i++){
myTemplate temp=(myTemplate)dlm.elementAt(i);
if(temp.getId()==mt.getId()){
myListModel mlm=tbc.getData().getModel();
mlm.ContentsChanged(temp, i, i);

maar dan heb je toch alle objecten van mlm overschreven? en niet alleen myTemplate temp?

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

kleine opmerking, moet:

code:
1
 if(temp.getId()==mt.getId())


niet veranderd worden in:

code:
1
 if(temp.getId().equals(mt.getId())){


Ik heb geleerd dat objecten altijd met .equals(Object d) moet worden vergeleken.

  • Boegel
  • Registratie: Maart 2002
  • Laatst online: 07-01-2018

Boegel

just boegel

Verwijderd schreef op 31 July 2003 @ 15:59:
kleine opmerking, moet:

code:
1
 if(temp.getId()==mt.getId())


niet veranderd worden in:

code:
1
 if(temp.getId().equals(mt.getId())){


Ik heb geleerd dat objecten altijd met .equals(Object d) moet worden vergeleken.
Misschien geetf getId() geen object terug maar een integer, dan werkt == perfect...

boegel - er zijn maar 10 soorten mensen in de wereld: diegene die het binaire stelsel kennen en diegene die het niet kennen


Verwijderd

Topicstarter
Klopt, het geeft een primitief int terug, dat heb ik express gedaan, zodat het makkelijk te vergelijken is :)

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 13-08 20:56

jAnO!

lalalavanillevla

heb je het al gevonden?

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

Boegel schreef op 31 July 2003 @ 16:54:
[...]


Misschien geetf getId() geen object terug maar een integer, dan werkt == perfect...
Ja, dan wel ja :)

Verwijderd

Topicstarter
jAnO! schreef op 31 juli 2003 @ 17:15:
heb je het al gevonden?
Nee, nog niet :/ Maar als je een idee hebt wat er fout kan zijn? ;)

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 13-08 20:56

jAnO!

lalalavanillevla

Ik snap nog niet helemaal wat je precies doet... vandaar ook mijn eerdere vraag..
Kan je die nog beantwoorden? Want dan kan ik misschien behulpzaam zijn...

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

Topicstarter
Een frisse start vanmorgen helpte :) Ik zat al te denken "waarom kun je in hemelsnaam niet makkelijk een item in een jlist veranderen?". Nu bleek na nogmaals door de documentatie gebladerd te hebben dat defaultlistmodel wel een functie had om een item te veranderen "setElementAt()", daar had ik gisteren overheen gelezen en had m'n eigen "setElementAt()" proberen te implementeren.

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 13-08 20:56

jAnO!

lalalavanillevla

aha.. dat wilde je dus doen. mooi dat het opgelost is.

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.

Pagina: 1