/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Sortér JTable via klik på header
Fra : Mikael Nørrelund And~


Dato : 21-07-03 11:15

Hejsa,

jeg prøver at få sorteret indholdet i en JTable ved at
klikke på headeren, men jeg tror ikke helt jeg forstår
hvordan man skal gøre.

Jeg kan udfra Suns tutorial se, at man skal lave en
TableModel og lægge sorteringsmekanismen mellem
denne og GUIen:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#sorting

Jeg har prøvet mig lidt frem, men tror jeg har gået i
en forkert retning. Jeg har prøvet at inddrage de klasser
fra Suns tutorial, som man kan bruge som basis.

Programmets GUI ser således ud:
http://mikael-noerrelund.dk/ems/ems-front-full.jpg

Mine tabeller oprettes således (itemTable er den øverste):
public JTable itemTable, valgTable;

Og de bliver smidt ned i en JScrollPane:
JScrollPane itemScroll = new JScrollPane(itemTable);
JScrollPane valgScroll = new JScrollPane(valgTable);

Jeg har lavet en samling objekter til overskrifterne:
Object itemOver[] = {"Nummerbetegnelse","Betegnelse",
"Pris", "Enheder","Mængde"};

Jeg bruger nogle vektorer til at sætte overskrifterne på
med:
Vector itemOverSkrift = new Vector();
Vector valgOverSkrift = new Vector();

Disse overskrifter sættes på via denne metode:
private void setOverskrift(){
for(int t = 0; t<itemOver.length;t++){
valgOverSkrift.addElement(itemOver[t]);
itemOverSkrift.addElement(itemOver[t]);
}
}//Slut setOverskrift

Således prøver jeg at inddrage sorteringen:
GUITableModel myTableModelItems
= new GUITableModel(items,itemOverSkrift);
GUITableModel myTableModelValgte
= new GUITableModel(valgteItems,valgOverSkrift);

items og valgteItems er vektorer indeholdende data
til tabellerne.

TableSorter sorter1 = new TableSorter(myTableModelItems);
TableSorter sorter = new TableSorter(myTableModelValgte);

itemTable = new JTable(sorter1);
valgTable = new JTable(sorter);

setTableColumns();
Sætter bredde på kolonnerne, se koden her:
http://mikael-noerrelund.dk/ems/setTableColumns.txt

Der sker absolut intet ved tryk på headeren, jeg tester
ved samtidig at lave en
JOptionPane.showMessageDialog(null, "TJEK!!!");
for at se om det virker ved tryk på headeren og den
vises fint (inden tabellen fyldes med data!).

Efter inddragelse af Suns tutorial, har jeg 2 TableModels,
kan man nøjes med en enkelt eller er det dumt?
Min egen TableModel ser således ud:
http://mikael-noerrelund.dk/ems/GUITableModel.java.txt

Her er et fungerende eksempel, som jeg har gennemtærsket
sammen med Suns tutorial.
http://www.codeguru.com/java/articles/219.shtml

Kan nogen hjælpe mig videre?

--
Mvh.
Mikael Nørrelund Andersen

Mail adressen virker.


 
 
Niels Dybdahl (21-07-2003)
Kommentar
Fra : Niels Dybdahl


Dato : 21-07-03 17:13

> Jeg kan udfra Suns tutorial se, at man skal lave en
> TableModel og lægge sorteringsmekanismen mellem
> denne og GUIen:
>
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#sortin
g
> ...
> Der sker absolut intet ved tryk på headeren, jeg tester
> ved samtidig at lave en
> JOptionPane.showMessageDialog(null, "TJEK!!!");

Har du husket linien:

sorter.addMouseListenerToHeaderInTable(table);

Den er nævnt i Suns tutorial.

Hilsen
Niels Dybdahl



Mikael Nørrelund And~ (22-07-2003)
Kommentar
Fra : Mikael Nørrelund And~


Dato : 22-07-03 17:02

Niels Dybdahl wrote:
> Har du husket linien:
>
> sorter.addMouseListenerToHeaderInTable(table);


Ja, jeg har disse:
sorter.addMouseListenerToHeaderInTable(valgTable);
sorter1.addMouseListenerToHeaderInTable(itemTable);

Jeg havde nok ikke forklaret det grundigt nok, men disse
var grunden til jeg tester med en JOptionPane og inden
jeg fylder tabellerne med data kan jeg godt fange denne:
JOptionPane.showMessageDialog(null, "TJEK!!!");

Men når tabellerne er fyldt kan jeg ikke, det skyldes sikkert
en masse metoder jeg udfører derimellem, men jeg kan ikke
lige finde ud af hvilken (og det kan I naturligvis heller ikke
uden hele koden - og den er stor!).

--
Mvh.
Mikael Nørrelund Andersen

Mail adressen virker.


Morten Enevoldsen (06-08-2003)
Kommentar
Fra : Morten Enevoldsen


Dato : 06-08-03 20:14

For en kasse øl vil jeg gerne give dig kilde-koden for en sofistikeret
version af en JTable, som kan sorteres. Den understøtter også flytningen af
kolloner, printning, konfiguration mm. Mail hvis interesseret. Den tog mig
over en uge og lave ;) Du stopper blot en table-model i maven på min JTable.

mvh Morten Enevoldsen
mortene snabel-a softhome.net

"Mikael Nørrelund Andersen" <nospam@mikael-noerrelund.dk> wrote in message
news:3f1bbd11$0$48903$edfadb0f@dtext02.news.tele.dk...
> Hejsa,
>
> jeg prøver at få sorteret indholdet i en JTable ved at
> klikke på headeren, men jeg tror ikke helt jeg forstår
> hvordan man skal gøre.
>
> Jeg kan udfra Suns tutorial se, at man skal lave en
> TableModel og lægge sorteringsmekanismen mellem
> denne og GUIen:
>
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#sorting
>
> Jeg har prøvet mig lidt frem, men tror jeg har gået i
> en forkert retning. Jeg har prøvet at inddrage de klasser
> fra Suns tutorial, som man kan bruge som basis.
>
> Programmets GUI ser således ud:
> http://mikael-noerrelund.dk/ems/ems-front-full.jpg
>
> Mine tabeller oprettes således (itemTable er den øverste):
> public JTable itemTable, valgTable;
>
> Og de bliver smidt ned i en JScrollPane:
> JScrollPane itemScroll = new JScrollPane(itemTable);
> JScrollPane valgScroll = new JScrollPane(valgTable);
>
> Jeg har lavet en samling objekter til overskrifterne:
> Object itemOver[] = {"Nummerbetegnelse","Betegnelse",
> "Pris", "Enheder","Mængde"};
>
> Jeg bruger nogle vektorer til at sætte overskrifterne på
> med:
> Vector itemOverSkrift = new Vector();
> Vector valgOverSkrift = new Vector();
>
> Disse overskrifter sættes på via denne metode:
> private void setOverskrift(){
> for(int t = 0; t<itemOver.length;t++){
> valgOverSkrift.addElement(itemOver[t]);
> itemOverSkrift.addElement(itemOver[t]);
> }
> }//Slut setOverskrift
>
> Således prøver jeg at inddrage sorteringen:
> GUITableModel myTableModelItems
> = new GUITableModel(items,itemOverSkrift);
> GUITableModel myTableModelValgte
> = new GUITableModel(valgteItems,valgOverSkrift);
>
> items og valgteItems er vektorer indeholdende data
> til tabellerne.
>
> TableSorter sorter1 = new TableSorter(myTableModelItems);
> TableSorter sorter = new TableSorter(myTableModelValgte);
>
> itemTable = new JTable(sorter1);
> valgTable = new JTable(sorter);
>
> setTableColumns();
> Sætter bredde på kolonnerne, se koden her:
> http://mikael-noerrelund.dk/ems/setTableColumns.txt
>
> Der sker absolut intet ved tryk på headeren, jeg tester
> ved samtidig at lave en
> JOptionPane.showMessageDialog(null, "TJEK!!!");
> for at se om det virker ved tryk på headeren og den
> vises fint (inden tabellen fyldes med data!).
>
> Efter inddragelse af Suns tutorial, har jeg 2 TableModels,
> kan man nøjes med en enkelt eller er det dumt?
> Min egen TableModel ser således ud:
> http://mikael-noerrelund.dk/ems/GUITableModel.java.txt
>
> Her er et fungerende eksempel, som jeg har gennemtærsket
> sammen med Suns tutorial.
> http://www.codeguru.com/java/articles/219.shtml
>
> Kan nogen hjælpe mig videre?
>
> --
> Mvh.
> Mikael Nørrelund Andersen
>
> Mail adressen virker.
>



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste