Swing Dynamisch Objekte erzeugen

Atoyo

Mitglied
Hallöchen Java-Gemeinde,

folgendes Problem:
Ich bau an einer Swing-Oberfläche auf der in einem JScrolPane mehrere JPanels integriert sind in einem Gridlayout. Und nun habe ich in einer Datei die ich einlese mehrere Dinge die in diese Panels sollen, die ich jedoch erst erstellen kann, wenn ich während der Laufzeit die Datei auslese, da ich diese zusätzlich am Kopf der Oberfläche auswählen kann...

Jedes dieser JPanel im JscrollPane haben eine "Überbezeichnung", will heissen sind einem Thema für sich. In der Datei habe ich nun unterscheidlich viele "Unterbezeichnungen" die ich auf das JPanel mit einfügen muss. Schematisch mit "Überbezeichnungen" sieht das so aus:
___________________________
[] "Überbezeichnung"
___________________________
[] "Überbezeichnung"
___________________________

dabei stellen [] die JComboboxen zur Auswahl dar die ich benötige und _____ die Panelgrenzen.

Mein Problem ist nun, dass ich sobald ich eine der Comboboxen geclicked habe, aus der Datei dei dazu gehörigen "Unterbezeichnungen" sulesen will und je nach dem wieviele das sind wiederum dafür Comboboxen erstellen und um das graphisch halbwegs brauchbar zu gestalten noch dummylabels. Das Ganze soll dann in etwa so aussehen: (schaut hier net so aus wies soll, aber dank GridLayout formatiert der das ja richtig^^)

_________________________________________________
[] "Überbezeichnung" [] "Unterbezeichnung"
(Dummylabel) [] "Unterbezeichnung"
_________________________________________________
[] "Überbezeichnung" [] "Unterbezeichnung"
(Dummylabel) [] "Unterbezeichnung"
(Dummylabel) [] "Unterbezeichnung"
(Dummylabel) [] "Unterbezeichnung"
_________________________________________________

aus der Datei beziehe ich folgende Daten die, wie ich denke dafür relevant sind:
eine eindeutige ID (als String) in der Form xx.xx, sowie eine konkrete Bezeichung für die "Unterbezeichungen" (als String). Hab also beides in ein String[][] (1. DImension die ID, 2. Dimension die Bezeichnung) eingelesen.
Ich hatte mir nun gedacht, dass man die ID ohne den Punkt dazwischen prima als Objektname verwenden kann und die Bezeichnung halt als Bezeichnung was hinter der Combobox steht.
Also folgendes versucht:

Java:
for(int i = 0, j = 0; i < String[][].length; i++){
JComboBox cb + String[i][j] = new JComboBox(String[j][i]);
pZielpanel.add(cb+String[i][j]);
}

geht folglich net, sonst würd ich hier net fragen^^
Wenn ich bei Google suche kommen dann solche sachen wie: Geht in Java nicht. oder es gibt gar keine verwertbaren Aussagen dazu.

bin über jeden Rat dankbar.
 
bitte
http://www.java-forum.org/top-fragen/62032-fragen-variablennamen.html
lesen, obwohl du eigentlich schon Arrays kennst, aber Zeile 1 macht für sich natürlich gar keinen Sinn,
Zeile 2 und dann 3 auch nicht, Zeile 4 ist gelungen ( 😉 )

erstmal von aller Aufregung beruhigen, GUIs, JComboBoxen und ähnlich kompliziertes vergessen und ganz langsam ein 'funktionieres Programm' anfangen,
z.B. eine einfache Klasse mit main-Methode, darin ein eindimensionales Array erstellen, befüllen und mit Schleife durchlaufen und ausgeben,
wenn das geschafft ist, dann hat man schonmal was, das würde schon gegen die schlimme Zeile 1 von deinen 4 Code-Zeilen helfen,
danach kann man anderes versuchen, ein zweidimensionales Array z.B.,
auch das Erstellen von meheren ComboBoxen zu einem Array kann man dort üben,
aber auch gerne langsam zum Ursprungsprogramm zurückkehren
 
EDIT: Ach verdammt. Es war jemand schneller als ich. 🙂

Ich gehe richtig in der Annahme, dass du keine IDE benutzt? Solltest du besser mal tun. 😉

Außerdem Dokumentation lesen, dann coden.

JComboBox (Java Platform SE 6)
Galileo Computing :: Java ist auch eine Insel – 19.17 Auswahlmenüs, Listen und Spinner

Okay, und dann noch fix ein Code Beispiel zu deinem Problem soweit ich es verstanden habe:
Java:
import java.awt.GridLayout;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class DynJComboBox extends JFrame {

	public DynJComboBox() {
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		// test daten oder hier deine Datei einlesen
		String[][] values = {
				{"11.22", "Unterbezeichnung1"}, {"22.33", "Unterbezeichnung2"}
		};
		JPanel content = new JPanel(new GridLayout(0, 2, 5, 5));
		for (int i = 0; i < values.length; i++) {
			content.add(new JComboBox(new Object[] {values[i][0]}));
			content.add(new JLabel(values[i][1]));
		}
		setContentPane(content);
		pack();
	}
	
	public static void main(String[] args) {
		new DynJComboBox().setVisible(true);
	}
}

Allerdings ist vielleicht ein spezielles Objekt als Datencontainer besser als ein mehr-dimensionales Array.
Könnte zum Beispiel so aussehen:
Java:
public class DataContainer {
		
		private String id;
		private String unterbezeichnung;
		
		public DataContainer(String id, String unterbezeichnung) {
			this.id = id;
			this.unterbezeichnung = unterbezeichnung;
		}
		
		public void setId(String id) {
			this.id = id;
		}
		
		public String getId() {
			return id;
		}
		
		public void setUnterbezeichnung(String unterbezeichnung) {
			this.unterbezeichnung = unterbezeichnung;
		}
		
		public String getUnterbezeichnung() {
			return unterbezeichnung;
		}
	}
Könnte für einen übersichtlicheren Code sorgen. 🙂
 
erstma thx für die schnellen antworten ^.^

croni ich werd ma deinen vorschlag einbauen, ich tu mich immer noch etwas schwer mit containern daher das array 🙁
zum thema ide: ich würd eclipse eig als solche bezeichnen und damit arbeite ich.

das mein codeschnipsel müll is weiss ich, der sollte lediglich als verdeutlichung stehen als wenn ich das weiter versucht hätte zu umschreiben...


EDIT:

Java:
for (int i = 0; i < values.length; i++) {
            content.add(new JComboBox(new Object[] {values[i][0]}));
            content.add(new JLabel(values[i][1]));
        }
[/Java]
das war alles was mir fehlte bzw. net aufgefallen ist beim lesen. java ist auch eine insel und die api sind bei mir die ganze zeit offen und ich les da eig auch nach, hab ich wohl einfach was übersehen...
 
Zuletzt bearbeitet:

Zurück
Oben