[JAVA] JList Selectie

Pagina: 1
Acties:
  • 204 views sinds 30-01-2008
  • Reageer

  • XTREEMRaGE
  • Registratie: April 2003
  • Laatst online: 17-04 10:06

XTREEMRaGE

XTRËËM|RåGË

Topicstarter
Goedendag tweakers/tweaksters,

Ik heb zelf een klein simpel applicatie in elkaar gezeg om wat lekker van java te leren :).
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class JListOpdracht extends JFrame implements ActionListener{
    private JButton knopA = new JButton("A");
    private JButton knopB = new JButton("B");
    private JButton knopC = new JButton("C");
    private JButton knopClear = new JButton("Clear");


    String woorden[] = { "Aal", "Aap", "Aas", "Arend", "Bom", "Boom", "Bos", "Bot", "Car", "Colt", "Computer", "Creative"};
    private JList list = new JList(woorden);

   public JListOpdracht(){
        Container container = getContentPane();
        container.setLayout(new BorderLayout());

        JPanel p1 = new JPanel();
        p1.setLayout(new GridLayout(1,4));

        p1.add(knopA);
        p1.add(knopB);
        p1.add(knopC);
        p1.add(knopClear);

        knopA.addActionListener(this);
        knopB.addActionListener(this);
        knopC.addActionListener(this);
        knopClear.addActionListener(this);

        JPanel p2 = new JPanel();
        p2.setLayout(new BorderLayout());
        p2.add(list, BorderLayout.CENTER);
        p2.add(p1, BorderLayout.NORTH);
        container.add(p2, BorderLayout.CENTER);


    }


    public void actionPerformed(ActionEvent e){
        JButton knop = (JButton) e.getSource();
        if (knop == knopA){
            System.out.println("Knop A is geklikt");
            int start = 0;
            int einde = 3;
            list.setSelectionInterval(start, einde);
        }
        else if (knop == knopB){
            System.out.println("Knop B is geklikt");
            int start = 4;
            int einde = 7;
            list.setSelectionInterval(start, einde);
        }
        else if (knop == knopC){
            System.out.println("Knop C is geklikt");
            int start = 8;
            int einde = 11;
            list.setSelectionInterval(start, einde);
        }
        else if (knop == knopClear){
            System.out.println("Knop Clear is geklikt");
            list.clearSelection();
        }
     }

        public static void main(String[] args){
        JListOpdracht frame = new JListOpdracht();
        frame.setTitle("Knoppen drukken");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 250);
        frame.setVisible(true);
    }
}


Zal wel newbie code voor jullie zijn, maar he ben een beginner :).
Dit werkt gelukkig en ben ver gekomen(voor mij dan :P ) maar niet echt wat ik wilde hebben.

Wat ik eigenlijk wil, is dat ie moet gaan kijken welke woorden met een A, B of C begint en die selecteerd.

Dus als ik op knop A druk moet ie alle woorden die begint met A selecteren.
Je zou zeggen dat ie het wel leuk doet, maar als ik de code hieronder verander:
Java:
1
String woorden[] = { "Aal", "Aap", "Aas", "Arend", "Bom", "Boom", "Bos", "Bot", "Car", "Colt", "Computer", "Creative"};

in
Java:
1
String woorden[] = { "Car", "Aap", "Bom", "Arend", "Aas", "Computer", "Bos", "Bot", "Aal", "Colt", "Boom", "Creative"};


En ik druk nu knop A in dan selecteerd ie natuurlijk de eerste 4 woorden, maar de bedoeling is dat ie alleen de woorden die beginnen met A selecteerd.
Ik heb ff gezocht op google en heb ik dit gevonden:
Java:
1
2
3
4
5
6
    String prefix = "A";
    
    // Search forward, starting from index 0, looking for an item that starts with "A"
    int start = 0;
    javax.swing.text.Position.Bias direction = javax.swing.text.Position.Bias.Forward;
    int woorden = list.getNextMatch(prefix, start, direction);


link van de code hierboven

Nu is ie wel leuk aan het zoeken, maar hoe krijg ik hem zover dat ie ook werkelijk de woorden selecteerd?
Of kan het heel anders??? Makkelijker??? ;)
Ik hoop dat mijn vraag een beetje duidelijk is B)

Bedankt voor jullie hulp _/-\o_

[ Voor 8% gewijzigd door XTREEMRaGE op 09-01-2006 17:18 ]

GöÐ, ®Ë§þËÇT åñÐ Höñöµ® | LÜ©K>SkïLL | XT®ËËM|®åGË ||Funky Monkeys || Fm


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Zie javadoc: http://java.sun.com/j2se/...ml#setSelectedIndices(int[])

Je kan op die manier een array van indexwaarden meegeven die moeten worden geselecteerd. Hoe je die indexen bepaalt, daar zul je zelf de code voor moeten schrijven.

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

bigbeng schreef op maandag 09 januari 2006 @ 17:50:
Zie javadoc: http://java.sun.com/j2se/...ml#setSelectedIndices(int[])

Je kan op die manier een array van indexwaarden meegeven die moeten worden geselecteerd. Hoe je die indexen bepaalt, daar zul je zelf de code voor moeten schrijven.
Een hint richting String.startsWith is misschien op zijn plaats.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • XTREEMRaGE
  • Registratie: April 2003
  • Laatst online: 17-04 10:06

XTREEMRaGE

XTRËËM|RåGË

Topicstarter
Ok tnx :D
Ga morgen ff uitproberen, helaas vandaag geen tijd :/

btw de code die als laatst is opgegeven is nix?
of... ik weet het ook ff nie meer ;x

Morgen weer :>

[ Voor 46% gewijzigd door XTREEMRaGE op 09-01-2006 19:31 ]

GöÐ, ®Ë§þËÇT åñÐ Höñöµ® | LÜ©K>SkïLL | XT®ËËM|®åGË ||Funky Monkeys || Fm


  • XTREEMRaGE
  • Registratie: April 2003
  • Laatst online: 17-04 10:06

XTREEMRaGE

XTRËËM|RåGË

Topicstarter
Nou ik kom er niet uit :(
pff was ik maar een java wizz :)

Uiteindelijk kom je toch weer terecht op de prefix, wat ik had gegeven als laatste code :X
Maar ja, hoe ik dat werkend kan krijgen ben ik nog niet achter ;)

GöÐ, ®Ë§þËÇT åñÐ Höñöµ® | LÜ©K>SkïLL | XT®ËËM|®åGË ||Funky Monkeys || Fm


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public int[] getIndexes( String startLetter ) {
   int[] retval = new int[0];
   for ( int i=0; i < woorden.length; i++ ) {
      if ( woorden[i].startsWith(startLetter)  ) {
          retval = addToArray( i, retval );
      }
   }
   return retval;
}

private int[] addToArray( int value, int[] baseArray )
{
   int[] retval = new int[baseArray.length+1];
   for (int i=0; i < baseArray.length; i++) {
      retval[i] = baseArray[i];
   }
   retval[baseArray.length] = value;
   return retval;
}


Zo, met deze code krijg je een array van het type int terug die je aan de eerder door mij genoemde methode van JList kunt voeren.
Hierbij ga ik ervan uit dat de volgorde van de strings in de variabele "woorden" gelijk is aan die in je JList.

De methode addToArray heb ik toegevoegd omdat je vantevoren niet kan weten hoe lang de array moet worden en een array heeft een vaste lengte in Java. Een andere mogelijkheid zou zijn eerst te bepalen hoe groot je array moet worden, hem te creeren en vervolgens te vullen. In feite doorloop je dan de for-lus in getIndexes 2x. Je moet zelf maar bepalen wat jij het handigst vindt.

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:52

Robtimus

me Robtimus no like you

bigbeng schreef op woensdag 11 januari 2006 @ 13:16:
Java:
1
2
3
for (int i=0; i < baseArray.length; i++) {
    retval[i] = baseArray[i];
}
Tip: System.arraycopy(baseArray, 0, retval, 0, baseArray.length);
Deze method is niet voor niets native.

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


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 22:27
IceManX schreef op woensdag 11 januari 2006 @ 17:53:
[...]
Tip: System.arraycopy(baseArray, 0, retval, 0, baseArray.length);
Deze method is niet voor niets native.
Agezien van het feit dat System.arraycopy() handig is in het gebruik denk ik dat de native implementatie hiervan in de meeste gevallen qua performance een micro-optimalisatie is.
Wel een goeie tip overigens :)

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

Confusion

Fallen from grace

FallenAngel666 schreef op woensdag 11 januari 2006 @ 18:39:
Agezien van het feit dat System.arraycopy() handig is in het gebruik denk ik dat de native implementatie hiervan in de meeste gevallen qua performance een micro-optimalisatie is.
Dat is natuurlijk waar, maar ook uit documentatie-oogpunt is het betere code.

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


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
IceManX schreef op woensdag 11 januari 2006 @ 17:53:
[...]
Tip: System.arraycopy(baseArray, 0, retval, 0, baseArray.length);
Deze method is niet voor niets native.
Goeie tip, dit topic gaat op de bookmarklijst voor toekomstige referentie. (Zo zie je maar weer dat hands-on leren van een taal ook z'n nadelen heeft ;) )

  • XTREEMRaGE
  • Registratie: April 2003
  • Laatst online: 17-04 10:06

XTREEMRaGE

XTRËËM|RåGË

Topicstarter
:> zal ik ff doornemen tnx _/-\o_

[ Voor 3% gewijzigd door XTREEMRaGE op 12-01-2006 16:45 ]

GöÐ, ®Ë§þËÇT åñÐ Höñöµ® | LÜ©K>SkïLL | XT®ËËM|®åGË ||Funky Monkeys || Fm

Pagina: 1