Swing: Scrollbalken scrollt den Inhalt einer JList nicht

Status
Nicht offen für weitere Antworten.

sliwalker

Top Contributor
Hoi,

wenn mir jemand bei folgendem Problem helfen könnte:

Eigentlich ganz simple^^

Ich hab folgende Componenten:
Code:
	JTextField 	tf;
	JList 		list;
	JScrollPane sp;
	Scrollbar sb;
	String[] 	input = { blablabla };

Aufgabe war, ein textfeld und ne List zu erstellen,
und wenn man was in textfeld eingibt, soll er auf
den eintrag in der List springen(selecten).

Das klappt ja auch jetzt, aber die Teilaufgabe,
einen Scrollbalken einzufügen, mit dem man die Liste scrollen
kann, klappt nur halb.

Erstellt krieg ich ihn auch, aber wenn ich scrolle macht er nichts.

Mein Buch hilft mir nicht weiter(hab schon alles abgeschrieben und getestet)
und alles was ich hier im Forum zu dem Thema gefunden habe hilft mir
nicht weiter.

Wie kann ich meine JList scrollen?

Ich glaub ich poste mal den ganzen code( is net viel 😉 ):
Code:
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;

class Suche extends JFrame implements ListSelectionListener , ActionListener, 
ItemListener, AdjustmentListener, DocumentListener
{
	JTextField 	tf;
	JList 		list;
	JScrollPane sp;
	Scrollbar sb;
	String[] 	input = { 	"Abbas","Balduin","Caroline","Detlef","Erno","Fabian","Gonzo","Haribald",
			"Idris","Jockel","Kurt","Langerhans","Martha","Nina","Opa","Quasimir",
			"Richard","Sigurd","Taliasmin","Udo","Volker","Waltraut","Xilis","Yildirim",
			"Zengin" 
	};
	
	void SetFeld(Document d)
	{
		String s ="";
		try
		{
			s = d.getText(0, d.getLength());
		} catch (BadLocationException ble)
		{
			System.out.println("BadLocationException" + ble);
		}
		for(int a = 0; a < input.length; a++)
		{
			if(input[a].startsWith(s.toLowerCase()) || input[a].startsWith(s.toUpperCase()))
			{
				list.setSelectedIndex(a);
			}
		}
	}
	public Suche()
	{
		super("Suche");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		Container cp = getContentPane();
		cp.setLayout(new BorderLayout());
		
		tf		= new JTextField(15);
		list 	= new JList(input);
		sp 		= new JScrollPane(list);
		sb		= new Scrollbar();
		
		for(int i = 0; i < list.getModel().getSize(); i++)
		{
			System.out.println(list.getModel().getElementAt(i));
		}
		
		tf.getDocument().addDocumentListener(this);
		list.addListSelectionListener(this);
		sb.addAdjustmentListener(this);
		
		cp.add(tf, BorderLayout.NORTH);
		cp.add(list, BorderLayout.CENTER);
		cp.add(sb, BorderLayout.EAST);
		
	}

	public void actionPerformed(ActionEvent ae)
	{
		// TODO Auto-generated method stub
		
	}

	public void itemStateChanged(ItemEvent ie)
	{
		// TODO Auto-generated method stub
		
	}

	public void valueChanged(ListSelectionEvent lse)
	{
		// TODO Auto-generated method stub
		
	}

	public void adjustmentValueChanged(AdjustmentEvent ade)
	{
		switch(ade.getAdjustmentType())
		{
			case AdjustmentEvent.UNIT_INCREMENT:
			case AdjustmentEvent.UNIT_DECREMENT:
			case AdjustmentEvent.BLOCK_INCREMENT:
			case AdjustmentEvent.BLOCK_DECREMENT:
			case AdjustmentEvent.TRACK:
		}
		
	}

	public void changedUpdate(DocumentEvent de)
	{
		SetFeld(de.getDocument());	
	}
	
	public void insertUpdate(DocumentEvent de)
	{
		SetFeld(de.getDocument());	
		
	}
	
	public void removeUpdate(DocumentEvent de)
	{
		SetFeld(de.getDocument());	
		
	}
}

public class MainSuche
{
	public static void main(String[] args)
	{
		Suche s1 = new Suche();
		s1.setBounds(250,250,150,300);
		//s1.pack();
		s1.show();
	}
}

Was mache ich falsch?

thx 4 hlp
SLi 😉
 
Hab was verändert, zur Info:
NEU:
Code:
		for(int i = 0; i < list.getModel().getSize(); i++)
		{
			if(list.getModel().getElementAt(i).toString().startsWith(s.toLowerCase()) || list.getModel().getElementAt(i).toString().startsWith(s.toUpperCase()))
			{
				list.setSelectedIndex(i);
			}
		}

ALT:
Code:
		for(int a = 0; a < input.length; a++)
		{
			if(input[a].startsWith(s.toLowerCase()) || input[a].startsWith(s.toUpperCase()))
			{
				list.setSelectedIndex(a);
			}
		}

Nur damit die selbe Grundlage haben 😉

greetz
SLi
 
Habs schon, danke...

Ich hab ja nur die list dem contentpane geadded, nicht das scrollpane,
was ich eigentlich hätte machen sollen.
für den, der vielleicht auch mal das problem hat, nochmal den richtigen code:

Code:
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;

class Suche extends JFrame implements ListSelectionListener , ActionListener, 
ItemListener, DocumentListener
{
	JTextField 	tf;
	JList 		list;
	JScrollPane sp;
	String[] 	input = { 	"Abbas","Balduin","Caroline","Detlef","Erno","Fabian","Gonzo","Haribald",
			"Idris","Jockel","Kurt","Langerhans","Martha","Nina","Opa","Quasimir",
			"Richard","Sigurd","Taliasmin","Udo","Volker","Waltraut","Xilis","Yildirim",
			"Zengin" 
	};
	
	void SetFeld(Document d)
	{
		String s ="";
		try
		{
			s = d.getText(0, d.getLength());
		} catch (BadLocationException ble)
		{
			System.out.println("BadLocationException" + ble);
		}

		for(int i = 0; i < list.getModel().getSize(); i++)
		{
			if(list.getModel().getElementAt(i).toString().startsWith(s.toLowerCase()) || list.getModel().getElementAt(i).toString().startsWith(s.toUpperCase()))
			{
				list.setSelectedIndex(i);
			}
		}
/*
		for(int a = 0; a < input.length; a++)
		{
			if(input[a].startsWith(s.toLowerCase()) || input[a].startsWith(s.toUpperCase()))
			{
				list.setSelectedIndex(a);
			}
		}
*/
	}
	public Suche()
	{
		super("Suche");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		Container cp = getContentPane();
		cp.setLayout(new BorderLayout());
		
		tf		= new JTextField(15);
		list 	= new JList(input);
		sp 		= new JScrollPane(list);
		
		tf.getDocument().addDocumentListener(this);
		list.addListSelectionListener(this);
		
		cp.add(new JScrollPane(list), BorderLayout.CENTER);
		cp.add(tf, BorderLayout.NORTH);
		
	}

	public void actionPerformed(ActionEvent ae)
	{
		// TODO Auto-generated method stub
		
	}

	public void itemStateChanged(ItemEvent ie)
	{
		// TODO Auto-generated method stub
		
	}

	public void valueChanged(ListSelectionEvent lse)
	{
		// TODO Auto-generated method stub
		
	}

	public void adjustmentValueChanged(AdjustmentEvent ade)
	{
		switch(ade.getAdjustmentType())
		{
			case AdjustmentEvent.UNIT_INCREMENT:
			case AdjustmentEvent.UNIT_DECREMENT: 
			case AdjustmentEvent.BLOCK_INCREMENT: 
			case AdjustmentEvent.BLOCK_DECREMENT: 
			case AdjustmentEvent.TRACK: 
		}
		
	}

	public void changedUpdate(DocumentEvent de)
	{
		SetFeld(de.getDocument());	
	}
	
	public void insertUpdate(DocumentEvent de)
	{
		SetFeld(de.getDocument());	
		
	}
	
	public void removeUpdate(DocumentEvent de)
	{
		SetFeld(de.getDocument());	
		
	}
}

public class MainSuche
{
	public static void main(String[] args)
	{
		Suche s1 = new Suche();
		s1.setBounds(250,250,150,300);
		//s1.pack();
		s1.show();
	}
}

greetz
SLi
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben