# JScrollPane und JList funktioniert net richtig ?



## FinalbrainXP (8. Nov 2006)

Hi, habe ein vielleicht kleines Problem für euch, aber ein größeres für mich 

Und zwar habe ich ein JScrollPane, dem ich eine JList zuordne
und dann die JList mit Werten fülle. Per Button soll dann ein bestimmtes Element der JList
einfach selectiert werden. Das ganze klappt gut, aber wenn ich den Inhalt der JList zu Laufzeit 
mit neuen, anderen Werten befülle und dann wieder einen bestimmten Wert selectieren möchte, 
dann wird dieser zwar selectiert, aber ist im unsichtbaren Bereich.

Kurz zusammengefasst:

1. Befülle zur Laufzeit eine JList, selectiere ein Element, Element wird ordentlich selectiert und ist sichtbar
2. Befülle zur Laufzeit die JList erneut, selectiere ein Element, Element wird ordentlich selectiert aber ist nicht im 
    Viewport des JScrollPanes

Was mache ich da falsch..bzw. muss ich hinzufügen ? Komischer Weise funktioniert es in Schritt 2, wenn ich erst was anderes Selektiere und danach dann das Selektiere was ich eigentlich möchte!




```
//JList mit JScrollPane
public class MenuList extends JScrollPane
{
	private JList menuList                 = null;
    	private DefaultListModel menuListModel = null; 
    
    	public MenuList(int posX, int posY, int width, int height)
	{
        	super();

		menuListModel = new DefaultListModel();
		menuList      = new JList(menuListModel);
		menuList.setBackground(Color.BLACK);
		menuList.setForeground(Color.GREEN.brighter().brighter());
		menuList.setDragEnabled(false);
		menuList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		menuList.setAutoscrolls(true);
				
		this.setWheelScrollingEnabled(true);
		this.getViewport().setView(menuList);
		this.setBounds(posX,posY,width, height);
	}

//........
//........





// Zum Befüllen der JList
public void addItem(String item)
{
	if (!item.equals(""))
		menuListModel.addElement(item);
}
    
// Zum Cleanen der JList
public void removeAllItems()
{
	menuListModel.clear();
}
    
// Zum Selektieren der JList    
public void selectItem(String item)
{
	menuList.setSelectedValue(item, true);
}
```


Weiss da jemand Rat ? Vielen Dank im vorraus

Greetz FB


----------



## André Uhres (8. Nov 2006)

```
menuList.setSelectedValue(item, true);
        int index = menuList.getSelectedIndex();
        menuList.scrollRectToVisible(menuList.getCellBounds(index, index));
```


----------



## FinalbrainXP (8. Nov 2006)

wow..klappt wunderbar..vielen Dank für deine kurze und präzise Antwort  Nun habe ich die Selection sichtbar, allerdings stört mich noch ein wenig, dass die Selection unten am Viewport angesiedelt ist und nicht oben. Hast du da noch ne Idee, wie man den Selectierten Eintrag ganz oben im Viewport sichtbar bekommt, anstatt unten im viewport ?

Gruss 

FB  :toll:


----------



## André Uhres (8. Nov 2006)

FinalbrainXP hat gesagt.:
			
		

> ..Hast du da noch ne Idee, wie man den Selectierten Eintrag ganz oben im Viewport sichtbar bekommt..




```
//aktiviere den auskommentierten Codeteil nur falls die selektierte Zeile 
        //nicht nach oben kommen soll, wenn sie schon im sichbaren Bereich ist:
        /*
          int i1 = menuList.getFirstVisibleIndex();
          int i2 = menuList.getLastVisibleIndex();
          menuList.setSelectedValue(item, false);
          int index = menuList.getSelectedIndex();
          if(index >= i1 && index < i2) return ;
        */
        int ind = menuListModel.getSize()-1;//erstmal zur letzten Zeile scrollen
        menuList.scrollRectToVisible(menuList.getCellBounds(ind, ind));
        menuList.setSelectedValue(item, false);
        ind = menuList.getSelectedIndex();//dann zur selektierten Zeile
        menuList.scrollRectToVisible(menuList.getCellBounds(ind, ind));
```


----------



## FinalbrainXP (8. Nov 2006)

Vielen Dank...da habe ich ja schon nen schlechtes Gewissen, das is schon wieder fast zugut vorgekaut *gg 



Gruss

FB :toll:


/edit:   Passt wunderbar, danke für die Mühe


----------

