JScrollPane und JList funktioniert net richtig ?

Status
Nicht offen für weitere Antworten.

FinalbrainXP

Aktives Mitglied
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!



Code:
//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
 
Code:
       menuList.setSelectedValue(item, true);
        int index = menuList.getSelectedIndex();
        menuList.scrollRectToVisible(menuList.getCellBounds(index, index));
 
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:
 
FinalbrainXP hat gesagt.:
..Hast du da noch ne Idee, wie man den Selectierten Eintrag ganz oben im Viewport sichtbar bekommt..
Code:
       //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));
 
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 🙂
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben