JSplitPane -> CardLayout ->Card aufrufen

quidnovi

Erfahrenes Mitglied
Hallo Ihrs :)

damit ich mir die Schilderung meines Problems erleichtere, erstmal die Ansicht einer Struktur:
hierarchie.png
Damit ich mich besser zurechtfinde, habe ich den Haupt Komponenten ein e - für Ebene vorgesetzt.

So sind diese angelegt:
Java:
	private JPanel e1MainPane;
	private BackgroundPanel e2MainPaneBg;
	
	private JSplitPane e3SplitPane;	
	private JPanel e3Header;
	
	private JScrollPane e4ScrollPane1;
	private JScrollPane e4ScrollPane2;
	
	public JPanel e5CardPane;
	private CardLayout cl_e5CardPane = new CardLayout(0, 0);
	
	private AuswahlAnzeigen aa;


Das Problem:
Ich schaffe es nicht, von "a" (e4ScrollPane1) aus, eine Card in e5CardPane anzuzeigen.

Folgender Hintergrund:
In e5CardPane kann sich der Anwender so allerhand zusammenklicken.
Das Gewählte wird in einer DB gespeichert.

Damit der Anwender den Überblick nicht verliert, werden alle seine Schritte im JPanel "a" (e4ScrollPane1) angezeigt.
Hier gibts neben jeden DB - Eintrag auch die Möglichkeit zu editieren.
Dazu klickt der Anwender auf den jeweiligen Button und bekommt im unteren Bereich der SpliPane (e5CardPane) dann die ausgewählte Card präsentiert.

Und daran scheitere ich.
Habe im inet und Forensuchen meist etwas über JList's gefunden, was mir aber nicht weiterhilft, denn es werden im Überblick auch Images angezeigt.

Folgender Versuch funktioniert leider nicht:
a.java
Java:
public void showCard(String s, CardLayout cl_e5CardPane) {
		cl_e5CardPane.show(e5CardPane, s);
	}

Wenn ich diese Methode aufrufe:
Java:
JButton btnNewButton = new JButton("New button");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				showCard("SelDrehen", null);				
			}
		});
...bekomme ich eine NullPointerException.
Ich weiß leider nicht, was diese NPE auslöst...der Pfad sollte wohl stimmen...

Nun bitte ich Euch um Eure Hilfe, vielen Dank schonmal im Voraus.

Aja...ihr werdet es sicher schon mitbekommen haben, ich bin leider immer noch ziemlich schwachbrüstig in Sachen Java :(

ps:
Kann man das mit der Übersicht und Editierbarkeit auch anders - einfacher lösen?
Beim Stöbern nach einer Lösung bin ich halt auf das SplitPane gekommen...vielleicht gibt's ja eine bessere Lösung ?
 

Anhänge

  • hierarchie.png
    hierarchie.png
    55,6 KB · Aufrufe: 84

genodeftest

Erfahrenes Mitglied
zu deiner Exception:
im 1. Code-Block rufst du in Zeile 2 folgendes auf:
Java:
cl_e5CardPane.show(e5CardPane, s);
Aber: der Parameter cl_e5CardPane ist null, weil er im 2. Code-Block so übergeben wurde. Willst du nicht evtl. im 1. Code-Block die beiden Variablen cl_e5CardPane und e5CardPane vertauschen?

zu deinem Layout: die Frage hab ich noch nicht ganz verstanden. Du lässt in einem der beiden ScrollPanes den User irgendwas bearbeiten und im anderen gibt es die graphische Ausgabe quasi als log aber editierbar? Das wird in Verbindung mit einer DB sehr schwer realisierbar, weil du 2 voneinander unabhängige Datensätze führen oder Befehle an die Datenbank wieder rückgängig machen musst…
 

quidnovi

Erfahrenes Mitglied
hi genodeftest :)

danke für die Antwort, leider mag das nicht so wie gewünscht funktionieren.
Wenn ich die Variablen austausche, :
Java:
e5CardPane.show(cl_e5CardPane, s);

dann rügt Eclipse mich und streicht show mit der Meldung

Code:
The method show(boolean) in the type Component is not applicable for the arguments (CardLayout, String)
durch.

Allerdings verstehe ich jetzt, wieso zuerst e5CardPane und dann erst das CardLayout, danke :)
Wäre ja alles richtig, zuerst den Container, welches das CardLayout aufnimmt , dann das CardlLayout und zu guter Letzt, die Card selbst.
Wieso ist "show" ein boolean? Was statt dessen?

"add" will auch nicht....
Java:
public void showCard(String s, Component cl_e5CardPane) {
		e5CardPane.add(cl_e5CardPane, s);
	}


Zum 2. Teil:
Sorry, hab' mich wohl etwas unklar ausgedrückt.

Im oberen Teil findet sich ein JPanel, welches mit einem Warenkorb vergleichbar ist.
Hier sieht der Anwender immer die gewählten "Produkte".
Wenn der Anwender ein "Produkt" ändern will, so klickt er auf einen Button neben dem Produkt.
Der Button trägt die Aufschrift "ändern".

Bei Klick auf diesen "Ändern" - Button erscheint im unteren Teil die Eingabemaske (Card "SelDrehen"), in welchem er wieder alle "Produkte" zur Auswahl hat.
Entscheidet sich der Anwender jetzt wieder für ein "Produkt" so klickt er auf den "dieses Produkt wählen" - Button.
Dann wird das gewählte "Produkt" in die DB gespeichert und zugleich die Übersicht im oberen Teil aktualisiert.

Somit arbeite ich natürlich nur mit einem Datensatz pro "session".

Ich hoffe, das ich mich jetzt verständlicher ausgedrückt habe. :)

Tja...nu habe ich leider keinen Weg gefunden, dieses Problem zu lösen :(
Allerdings habe ich einen anderen Weg gefunden, das Ganze umzusetzen :)

Die Struktur sieht jetzt folgendermaßen aus:

EbenenGui.png

Somit wird der Anwender mittels dem JPanel "e4Uebersicht" über all seine Schritte informiert.
Diese werden chronolgisch auf diesem JPanel angezeigt. Neben jedem Schritt befindet sich eine Ändern - Button.

Wenn nun der Anwender einen Schritt ändern will, so klickt er einfach auf den oben genannten Ändern-Button.
Dieser ist mit der passenden Card verknüpft und wird mit:
Java:
showCard("CardName");

über die Methode:
Java:
public void showCard(String s) {
		cl_e4CardPane.show(this.e4CardPane, s);
	}

im e4CardPane - Bereich aufgerufen.

So ganz glücklich bin ich allerdings nicht, da ich das ursprüngliche Problem "nur" umgangen bin,
respektive eine andere Lösung realisiert habe.

Naja...sollte schlimmeres passieren...aber passen tut's mir trotzdem nicht :mad:
Vielleicht nimmt sich ja jemand trotz Lösung die Mühe auf sich, den Fall zu erklären...denn verstehen will ich's :)

Vorerst mal danke fürs mitlesen und genodeftest für die Mühe :)
 

Anhänge

  • EbenenGui.png
    EbenenGui.png
    56,2 KB · Aufrufe: 56