Avatar billede dennism Nybegynder
10. november 2006 - 22:01 Der er 16 kommentarer og
1 løsning

Java: JList, hvilken række?

Jeg har en JList hvis indhold er hentet ind fra en database. så vidt jeg ved, er den eneste mulighed for at finde ud af, hvilken række der aktuelt er valgt, at lave en:
raceList.getSelectedIndex()

Mit problem er, at hvis jeg f.eks. får tallet 2 ud af dette, så ved jeg ikke hvilken række i min database det referer til. Det kunne derfor være smart, hvis jeg på en eller anden måde kunne på udleveret et ID sammen med index'et?
Hvordan løser man dette problem?

beklager, men har ikke flere point.
Avatar billede winners79 Nybegynder
10. november 2006 - 22:29 #1
Hvad indeholder JListen nu? en string, et objekt? indeholder Jlisten det ID du gerne vil have?
Avatar billede dennism Nybegynder
10. november 2006 - 22:31 #2
JList indeholder information til brugeren. F.eks. "1, VP's æresløb".
Avatar billede winners79 Nybegynder
10. november 2006 - 22:39 #3
lav en klasse:

public class Race{

String navn;

int nummer;

int id;

konstruktor..


getId..

osv

en toString der returnerer de ting du gerne vil have vist i Jlisten

så når du henter dine oplysninger ud af Databasen, opret "Race" objekter af oplysningerne og lav en ArrayList<Race> race = new ArrayList<Race>(); hvor du tilføjer disse objekter og smider dem videre til Jlist...

så kan du lave:
int id = ((Race)raceList.getSelectedValue()).getID();

Husk af caste til Race ellers bliver det opfattet som et Object

giver det mening?
Avatar billede dennism Nybegynder
10. november 2006 - 23:04 #4
Super smart..
Det gør sku livet noget lettere.. ;)

Tusind tak!

Smider du lige et svar...igen :)
Avatar billede dennism Nybegynder
10. november 2006 - 23:27 #5
Lige en anden ting; Hvordan tjekker jeg, om der er en række i min JList der er valgt? Noget i retningen af raceList.IsSelected()
Avatar billede winners79 Nybegynder
10. november 2006 - 23:35 #6
if (raceList.getSelectedValue() != null)
    // gør dette
Avatar billede dennism Nybegynder
11. november 2006 - 00:23 #7
Nu må du sige til, hvis du er træt af mine spørgsmål - du har ikke pligt til at svare :)

Jeg har en frame (BorderLayout). I dens EAST har jeg placeret dette panel:
JPanel rightPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));

Så laver jeg et Panel med BoxLayout, tilføjer nogle komponenter og til sidst tilføjer Boxlayoutet til rightPanel:
JPanel boxPanel = new JPanel();
boxPanel.setLayout(new BoxLayout(boxPanel,BoxLayout.Y_AXIS));
boxPanel.add(yearLabel);
boxPanel.add(yearBox);
boxPanel.add(raceLabel);
boxPanel.add(scrollRaceListPanel);
rightPanel.add(boxPanel);

Kan du fortælle mig, hvorfor det kommer til at se sådan her ud:
http://www.demaweb.dk/BoxLayout.jpg

Som du kan se, så er komponenterne centreret istedet for at være i venstre side.
Avatar billede winners79 Nybegynder
11. november 2006 - 01:06 #8
ser faktisk ud som om de er i højre side og ikke centreret
Avatar billede dennism Nybegynder
11. november 2006 - 09:52 #9
Ja, men det gør det jo bare endnu mere mærkeligt. Og hvorfor er min ComboBox så står?
Avatar billede dennism Nybegynder
15. november 2006 - 11:08 #10
Håber du vil hjælpe mig med et lignende problem med en JTable.
Som du vejledede mig til at gøre længere oppe i tråden, har jeg oprettet hver række i tabellen med et Race-objekt.

De vi arbejdede med JList kunne jeg hente ID'et på denne måde:
int raceId = ((Race)raceList.getSelectedValue()).getId();

Hvordan gør jeg det, når det er en JTable?
Jeg har prøvet dette:
int raceId = ((Race)table.getSelectedRow()).getId();

Men det virker desværre ikke. Får denne fejl:
found  : int
required: Server.Race
                int raceId = ((Race)table.getSelectedRow()).getId();

Håber du kan hjælpe!  Du skal nok få point! Har du ikke en løsning, må du meget gerne sige til - så opretter jeg et nyt spørgsmål.
Avatar billede dennism Nybegynder
15. november 2006 - 14:41 #11
Håber du lige gider at skrive, når du har set mit indlæg :)
Avatar billede dennism Nybegynder
15. november 2006 - 15:01 #12
Har gennemskuet hvad problemet er.
I vores JList bruger vi add-metoden på listen til at tilføje et objekt af typen Race. Dermed indeholder listen en reference til objektet.

Hvordan kan jeg gøre det samme med en JTable? Min JTable indeholder jo kun enten String eller Int i de enkelte celler, da jeg har tager race.getID() til cellen med ID'et - f.eks.
Har du en idé til, hvordan jeg kan gøre det jeg ønsker?
Avatar billede winners79 Nybegynder
15. november 2006 - 16:15 #13
De info to har i tabellen, ligger de som Objekter? eller som String, ints etc
Avatar billede dennism Nybegynder
15. november 2006 - 18:09 #14
Jeg ligger dem ind på denne måde:

                Race race = new Race(sql.getInt("num"), sql.getInt("year"), sql.getString("title"), sql.getInt("id"));
                data[n][0] = race.getYear();
                data[n][1] = race.getNum();
                data[n][2] = race.getTitle();
                data[n][3] = race.getId();

Antal ligger de som int og String.
Kan jeg gøre det på en anden måde?
Avatar billede winners79 Nybegynder
15. november 2006 - 18:29 #15
hvis data kan tilgås...

int raceId = data[minJTable.getSelectedRow()][3];
Avatar billede winners79 Nybegynder
15. november 2006 - 18:33 #16
nå ja skal lige sørge for at vi får et tal og ikke et object


int raceId = (Integer)data[minJTable.getSelectedRow()][3];
Avatar billede dennism Nybegynder
15. november 2006 - 19:15 #17
Super smart! Det kører bare ;) Tusind tak!

http://www.eksperten.dk/spm/745048

Beklager, men har ikke flere point.
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