schnixx Geschrieben 7. März 2012 Teilen Geschrieben 7. März 2012 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; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 7. März 2012 Teilen Geschrieben 7. März 2012 Schau dir unter JList (Java Platform SE 6) mal die verschiedenen Konstruktoren an. Die sollten dir auch schon mal weiterhelfen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sacaldur Geschrieben 7. März 2012 Teilen Geschrieben 7. März 2012 (bearbeitet) 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 7. März 2012 von Sacaldur Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 7. März 2012 Autor Teilen Geschrieben 7. März 2012 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?! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 7. März 2012 Teilen Geschrieben 7. März 2012 (bearbeitet) 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 7. März 2012 von Dragon8 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 8. März 2012 Autor Teilen Geschrieben 8. März 2012 Funktioniert prima. Danke. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnixx Geschrieben 9. März 2012 Autor Teilen Geschrieben 9. März 2012 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sacaldur Geschrieben 9. März 2012 Teilen Geschrieben 9. März 2012 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.