Avatar billede gruppe_trio Nybegynder
30. marts 2003 - 21:46 Der er 16 kommentarer og
2 løsninger

"Tømme" en JList

Vi har nogle JLists som vi vil "tømme" for den tekst som er i dem.  Hvordan gøres dette?

...altså tilsvarende etTekstFelt.setText("");
Avatar billede aslan Nybegynder
30. marts 2003 - 21:49 #1
liste.removeAll();
Avatar billede soreno Praktikant
30. marts 2003 - 21:53 #2
Man kunne vel også bruge:
liste.setListData(null);

(men jeg har ikke testet..)
Avatar billede gruppe_trio Nybegynder
30. marts 2003 - 22:02 #3
removeAll() får vi ikke til at fungere... Hvad gør vi forkert?

setListData(null); kan ikke bruges, men man kan proppe ind f.eks. en tom Vector:
setListData(new Vector());
Det er bare ikke en særlig køn løsning...
Avatar billede soreno Praktikant
30. marts 2003 - 22:06 #4
Hvorfor ikke ?
Den tomme vector repræsenterer jo netop JList's datamodel (som også skal være tom).
Avatar billede repsak Nybegynder
30. marts 2003 - 22:40 #5
setListData((Vector)null); måske :-)
Avatar billede gruppe_trio Nybegynder
30. marts 2003 - 23:36 #6
soreno >> Vi burde nok skrevet "Det virker bare ikke som en særlig køn løsning..."  Vi får et indtryk af at det er lidt "snyd"...
Avatar billede pkrasmus Nybegynder
31. marts 2003 - 00:03 #7
Dette burde virke:

list.getModel().removeAllElements();

Da ListModel implementerer DefaultComboBoxModel der har denne metode.
Avatar billede viht Nybegynder
31. marts 2003 - 00:47 #8
pkrasmus har ret, i skal kalde alle opdateringsmetoder på modellen, ikke på JListen. Modellen står for opdatering af View, det er ganske simpel Model View Controller :)
Avatar billede gruppe_trio Nybegynder
31. marts 2003 - 12:36 #9
Det er mulig vi ikke tænker ordentligt nu, men vi finder ingen removeAllElements() på list.getModel...
Avatar billede viht Nybegynder
31. marts 2003 - 14:30 #10
Du skal caste det til en (DefaultListModel)
Avatar billede viht Nybegynder
31. marts 2003 - 14:32 #11
Eller bare kalde modellen implicit:
DefaultListModel model = new DefaultListModel();
JList list = new JList(model);
model.removeAllElements();
Avatar billede pkrasmus Nybegynder
31. marts 2003 - 14:43 #12
Der kan man se hvad der sker når man skynder sig for meget ;-) Det er selvfølgelig rigtigt 'viht' at der skal castes, så lige for at skære det ud i pap...

((DefaultListModel)list.getModel()).removeAllElements();

;-)
Avatar billede gruppe_trio Nybegynder
31. marts 2003 - 16:19 #13
pkrasmus >> Så får vi en ClassCastException...  :-(
Avatar billede gruppe_trio Nybegynder
31. marts 2003 - 16:22 #14
viht >> Din måde fungerer, men det da lidt besværligt med "al" den kode hver gang?
Avatar billede viht Nybegynder
31. marts 2003 - 18:30 #15
Modellen er en privat instansvariablen i klassen, så du skriver  bare:

private DefaultListModel model;
private JList list;

public MyClass() {
  model = new DefaultListModel();
  list = new JList(model);
}

private boolean removeFromList(Object o) {
  return model.removeElement(o);
}

private void removeFromList(int index) {
  model.removeElementAt(index);
}

private void addToList(Object o) {
  model.addElement(o);
}
private void emptyList() {
  model.removeAllElements();
}
Avatar billede gruppe_trio Nybegynder
07. april 2003 - 12:25 #16
Det ser da fint ud - viht, vil du have nogle points?
Avatar billede viht Nybegynder
07. april 2003 - 12:34 #17
Tak
Avatar billede gruppe_trio Nybegynder
07. april 2003 - 12:45 #18
Tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester