Zum Inhalt springen

ArrayList in JList


schnixx

Empfohlene Beiträge

Hallo zusammen,

ich lese aus einer Datei verschiedene Inhalte aus, die ich dann im Verlauf in eine ArrayList schreibe und diese auf einem Panel ausgeben. Da ich innerhalb des Panels (bzw ArrayList) keine Scrollbar implementieren kann - die ich allerdings bei zunehmender Dateigröße benötige, da sonst die CheckBoxen samt Beschriftung nebeneinander angelegt werden- muss ich die ArrayList auf eine JList übertragen.

Kann mir jmd. anhand des Codeausschnitts erklären, wie das ganze funktioniert bzw. was ich falsch gemacht habe oder wie ich im Allgemeinen eine JList mit den Inhalt einer ArrayList befülle?

Danke.


	public JPanel transactionPanel()

	{



		FileUtil FileUtil= new FileUtil();

		Document doc;

		doc=FileUtil.getdata("C:\\config.xml");

		ArrayList<String> transactionlist=new ArrayList<String>();

		transactionlist=FileUtil.readTransaction(doc);


		JList list= new JList();


		Iterator<String> iter;

		iter=transactionlist.iterator();

		String str_help= new String();




		JPanel transactionPanel = new JPanel (new GridLayout(20,1));

		transactionPanel.setBorder(BorderFactory.createTitledBorder("Transaction"));


		//	transactionPanel.add(new JScrollPane());



		while (iter.hasNext() )

		{



			str_help=iter.next();


			if (str_help.isEmpty())

			{

				System.out.println("ENDE-kein weiterer Content für Transactions");

			}else 

			{


				list.add(new JCheckBox(str_help));

				transactionPanel.add(list);



			}

		}



		return transactionPanel;

	}

Link zu diesem Kommentar
Auf anderen Seiten teilen

eine JList hat grundsätzlich die Funktion, mehrere Optionen anzuzeigen, von der eine (oder manchmal auch mehrere, allerdings ist das eher seltener) ausgewählt werden können

entweder du bleibst bei den Checkboxen, die du dann aber in ein JPanel legen musst, welches in ein JScrollPane muss

oder du verwendest die JList, der du dann die Zeichenketten übergibst

wenn du sagen würdest, was du eigentlich vor hast, könnte ich dir sagen, was sich (meiner Meinung nach) besser eignen würde

die Methode zum Auslesen der Inhalte solltest du überarbeiten

das Ende der Auflistung sollte sich nicht durch eine leere Zeichenkette darstellen, sondern durch das Ende der Liste

oder anders: alle Elemente in der zurückgegebenen Liste sollten auch gültige Elemente sein

Nachtrag:

hat es einen bestimmten Grund, warum du einen Iterator verwendest und die Liste nicht mit einer Foreach-Schleife durchgehst?

diese könnte dann so aussehen:

for(String transaction:transactionlist) {

    list.add(transaction);

}

transactionPanel.add(list);

du solltest dem Panel das JList-Element auch nicht in der Schleife übergeben, sondern nach dieser

Bearbeitet von Sacaldur
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde das automatische Einfügen der Checkboxen gerne beibehalten und den JPanel einfach auf einen JScrollPane legen. Wenn das die Funktion liefert, dass das Panel anschließend scrollbar ist und die Checkboxen untereinander in einer Spalte eingefügt werden.

Es sollen also Einträge aus einer xml- Datei ausgelesen werden und untereinander mit einer Checkbox vorangestellt aufgelistet werden.

Wie implementiere ich nun auf das Panel eine Scrollbar?!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da ich innerhalb des Panels (bzw ArrayList) keine Scrollbar implementieren kann - die ich allerdings bei zunehmender Dateigröße benötige, da sonst die CheckBoxen samt Beschriftung nebeneinander angelegt werden- muss ich die ArrayList auf eine JList übertragen.

Was hindert dich daran dein JPanel innerhalb einer JScrollPane anzeigen zu lassen?

Wenn dann die Minimale Größe der gesamten Checkboxen die Größe deines Panels überschreitet, wird eine Scrollbar angezeigt.

Folgendes liefert das dir eine Scrollbar wenn zu viele Checkboxen hinzugefügt werden:


List<String> al = Arrays.asList(new String[]{"Lorem", "ipsum", "dolor", "sit", "amet", "consectetuer ", "adipiscing ", "elit"});


JPanel jpn = new JPanel(new GridLayout(0,1));

for(String s : al)

	jpn.add(new JCheckBox(s));


this.add(new JScrollPane(jpn));

(Wobei 'this' halt irgendein Container ist)

Bearbeitet von Dragon8
Link zu diesem Kommentar
Auf anderen Seiten teilen

Guten Morgen zusammen,

ich melde mich mal wieder an dieser Stelle, da es ja bereits hervorragend funktioniert hat...

Ich öffne über einen "add Button" ein neues Frame. Dieses soll änlich eines JOptionPanes eine ComboBox und ein TextField sowie ein Save Button zur Verfügung stellen. Die Eingabe soll weiter verwendet werden. Ich öffne das neue Frame in dem AktionListener des "add"- Buttons. Die eingegebenen Daten sollen erst weiterverwendet werden, wenn der "Save" Button betätigt wurde.

Momentan funktioniert dies nicht so und die Auswertung geschieht sofort mit dem Drücken des Add Buttons, sodass der standmäßige ComboBox Eintrag eingelesen wird (auch das TextField kann deshalb nicht ausgefüllt werden).

Ich hoffe meine Beschreibung war soweit verständlich und ihr könnt mir helfen!

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

im Gegensatz zu .NET blockiert die setVisible Methode (in .NET mit Windows Forms die Show Methode) nicht den aktuellen Thread, weshalb danach der Code normal ausgeführt wird

du könntest beispielsweise deinem Fenster eine Callback-Methode übergeben, die aufgerufen wird, sobald der "Save" Button betätigt wurde

du solltest einerseits nicht unbedingt auf AWT (Frame), sondern auf swing (JFrame) setzen

außerdem solltest du für Dialoge auch die entsprechende Klasse (JDialog) verwenden

wenn du einfach nur einen Text eingeben willst, kannst du auch folgendes verwenden:

javax.swing.JOptionPane.showInputDialog("Gib nen Text ein!");

diese Methode blockiert, wodurch du die Rückgabe (also die Eingabe) im Nachfolgenden Code verwenden kannst

du solltest aber überlegen, ob du für diese Eingabe wirklich ein separates Fenster benötigst

wenn du genauer schreiben würdest, was du eigentlich machen willst, könnte man dir auch einen besseren Weg vorschlagen

also:

was willst du eigentlich erreichen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...