Toon posts:

[Java] Jlist meerdere selecties methode

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig aan een project waarbij ik uit een database muziekstijlen moet halen bij een evenement (string vector) en deze muziekstijlen vervolgens moet selecteren in een Jlist die alle stijlen bevat. Deze jList wordt ook opgebouwd uit een string vector. Nu is het niet mogelijk om een methode als setSelectedValues() te gebruiken. Wel setSelectedIndices(). Daarom heb ik het volgende bedacht:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private int[] compareVectors(String eventId){
        int[] incs = null;
        int x = 0;
        int y = 0;
        Vector jList = index.queryManager.getStyles();
        Vector eventStyles = index.queryManager.getStylesByEvent(eventId);
        
        while(x <= eventStyles.size()){
           
            if(jList.elementAt(y).equals(eventStyles.elementAt(x))){
                
                incs[x] = y;
                
                x++;
                y = 0;
            }else{
                y++;
            }

        }


setSelectedIndices() gebruikt een int[]. Ik wil dus de twee vectoren vergelijken en als er een overeenkomst is het zoveelste element uit de lijst achterhalen. Mijn methode werkt niet. De compiler geeft steeds een array out of bounds exception. Weet iemand waar de fout zit?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 16-11 19:52

Gerco

Professional Newbie

Waarschijnlijk niet omdat je je incs[] array nooit aanmaakt, dan had je een NullPointerException gekregen, maar het is misschien wel een idee om daar even naar te kijken. De oorzaak is dan waarschijnlijker dat y groter is dan jList.size (what's in a name :X ).

[ Voor 19% gewijzigd door Gerco op 28-05-2008 13:27 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 01:08
Op welke regel krijg je die exception? ik vermoed
code:
1
incs[x] = y;
, al had ik eerder een nullpointerexception verwacht.

Roomba E5 te koop


Verwijderd

Topicstarter
Dit is de error:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.elementAt(Vector.java:427)
at view.View_modEventFrame.compareVectors(View_modEventFrame.java:300)

regel 300 is deze regel

code:
1
if(jList.elementAt(y).equals(eventStyles.elementAt(x))){


Dat met incs[] = null vind ik ook een beetje raar, maar netbeans begint de hele tijd te zeuren als ik het niet doe. Iemand een suggestie?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 16-11 19:52

Gerco

Professional Newbie

Die incs moet je initialiseren:
Java:
1
int[] incs = new int[100];


Waarschijnlijk is dat niet wat je wilt, want je weet nog niet hoeveel entries erin gaan komen. Kijk dan eens naar ArrayList, daar kun je gewoon aan appenden en converteren naar een Array als je dat wilt.

[ Voor 21% gewijzigd door Gerco op 28-05-2008 13:49 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 01:08
Verwijderd schreef op woensdag 28 mei 2008 @ 13:38:
Dit is de error:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.elementAt(Vector.java:427)
at view.View_modEventFrame.compareVectors(View_modEventFrame.java:300)

regel 300 is deze regel
Voor de volgende keer: je post maar 20 regels, geef dan even aan welke vand eze 20 de exception gooit...
code:
1
if(jList.elementAt(y).equals(eventStyles.elementAt(x))){
y is dus groter dan het aantal elementen in jlist, of x is groter dan eventStyles. Zet er een breakpoint op en je weer het.

[ Voor 9% gewijzigd door sig69 op 28-05-2008 13:53 ]

Roomba E5 te koop


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:06

Robtimus

me Robtimus no like you

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private int[] compareVectors(String eventId)
{
    int eventStylesSize = eventStyles.size(); // gecached omdat je die vaker nodig zult hebben
    int jListSize = jList.size(); // idem
    int[] incs = new int[eventStylesSize]; // geinitialiseerd
    int x = 0;
    int y = 0;
    Vector jList = index.queryManager.getStyles();
    Vector eventStyles = index.queryManager.getStylesByEvent(eventId);
        
    while(x < eventStylesSize && y < jListSize) // x <, niet x <=, tevens check op y
    {
        if (jList.elementAt(y).equals(eventStyles.elementAt(x)))
        {
            incs[x] = y;
            x++;
            y = 0;
        }
        else
        {
            y++;
        }
}

Zomaar wat kleine veranderingen die je hoe dan ook nodig zult hebben. Belangrijkste is de while conditie.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Volgens mij is Vector.indexOf() een stuk handiger...

Wie trösten wir uns, die Mörder aller Mörder?


Verwijderd

Topicstarter
@IceManX

Het werkt :) Ik ben erg blij met je tip. Tnx

[ Voor 4% gewijzigd door Verwijderd op 29-05-2008 16:40 ]


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Verwijderd schreef op donderdag 29 mei 2008 @ 15:34:
@IceManX

Het werkt :) Ik ben erg blij met je tip. Tnx
Begrijp ik daaruit dat je dit moeilijk te begrijpen algoritme gaat laten staan en niet vervangt door een loop waarin de indexOf methode van de Vector klasse wordt gebruikt?

Wie trösten wir uns, die Mörder aller Mörder?


Verwijderd

Topicstarter
@Confusion

Ik ben nog niet zo heel ervaren met java, deze methode is mij niet eerder opgevallen. Het project is al ingeleverd. Iig bedankt voor de tip. Ik zal er de volgende keer als ik zoiets moet doen eens naar kijken :)
Pagina: 1