Toon posts:

[Java] JList automatisch laten scrollen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een JList waar enkele honderden items inzitten. Die JList zit dus in een JScrollPane. Nu heb ik een search()-methode geschreven die een bepaald element in de JList opzoekt.

Java:
1
2
3
4
5
6
7
8
9
10
11
public void search() {
        for(int i = searchLocation; i < categories.size(); i++) {
            if(contains(((Category)categories.get(i)).getPattern(), search)) {
                categoryList.setSelectedIndex(i);
                searchLocation = i + 1;
                return;
            }           
        }
        JOptionPane.showMessageDialog(frame, "Geen overeenkomende resultaten gevonden.", "Niet gevonden", JOptionPane.INFORMATION_MESSAGE);
        searchLocation = 0;
    }

M'n JList heet dus categoryList. Die method werkt goed, en hij selecteert ook de goede items e.d., maar hij scrollt niet vanzelf naar het geselecteerde item toe. Ik dacht dit op te lossen door in m'n scrollpane setAutoscroll(true) te doen, maar dat helpt niks. Weet iemand hoe ik m'n scrollpane naar het goede item laat toescrollen (dus naar categoryList.setSelectedIndex(i)) :?

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Bij setSelectedValue kan je het opgeven.

Er is ook nog een ensureIndexIsVisible.


Ze werken allebei. Je hebt dus gewoon niet in de API gekeken. Hou kan je java programmeren zonder API???

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
import java.awt.*;
import javax.swing.*;

public class TestFrame{

  public static void main(String[] args) {
    Object data[] = new Object[10];
    for (int i = 0; i < data.length; i++)
      data[i] = "Object" + i;


    JFrame jFrame = new JFrame("JList Test");
    jFrame.setDefaultCloseOperation(3);

    JList jList1 = new JList(data);
    JList jList2 = new JList(data);
    jList1.setVisibleRowCount(3);
    jList2.setVisibleRowCount(3);
    JScrollPane jScrollPane1 = new JScrollPane(jList1);
    JScrollPane jScrollPane2 = new JScrollPane(jList2);

    Container pane = jFrame.getContentPane();
    pane.add(jScrollPane1, BorderLayout.WEST);
    pane.add(jScrollPane2, BorderLayout.EAST);

    jFrame.pack();
    jFrame.show();


    int index1 = 5;
    jList1.setSelectedValue(data[index1], true);

    int index2 = 7;
    jList2.setSelectedIndex(index2);
    jList2.ensureIndexIsVisible(index2);
  }
}

[ Voor 97% gewijzigd door Daos op 12-01-2005 19:24 ]