CardLayout und String-Constraints

Hallo mal wieder!

Habe folgendes Problem:
CardLayout erlaubt nur Strings als Constraints. Wenn ich eine Komponente mit einem Nicht-String als Constraint zu einem JPanel mit CardLayout hinzufügen will, kommt eine hübsche “IllegalArgumentException: cannot add to layout: constraint must be a string”.

Beispiel-Code:


import java.awt.CardLayout;

import java.awt.event.ItemEvent;

import java.awt.event.ItemListener;



import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;




public class Test extends JFrame implements ItemListener {




	JPanel cards;



	private static String P1 = "Panel1";

	private static String P2 = "Panel2";



	public static void main(String[] args) {

		new Test();

	}



	public UploadManagerDialog() {

		super("CardLayoutTest");



		Object o1 = new Object();

		Object o2 = new Object();



		// ArrayList<Upload> uploader = CONTROLLER.getUploadArray();



		cards = new JPanel(new CardLayout());



		JPanel p1 = new JPanel();

		p1.add(new JLabel("Das allererste Panel"));

		JPanel p2 = new JPanel();

		p2.add(new JLabel("Der Untergang der Panels"));



		// mit diesem Code kommt keine Exception:
		// cards.add(p1, P1);

		// cards.add(p2, P2);

		// hier kommt die Exception:
		cards.add(p1, o1);

		cards.add(p2, o2);



		JPanel cbp = new JPanel();

		String cbItems[] = { P1, P2 };

		JComboBox cb = new JComboBox(cbItems);

		cb.setEditable(false);

		cb.addItemListener(this);

		cbp.add(cb);



		add(cbp, BorderLayout.NORTH);

		add(cards, BorderLayout.CENTER);

		setSize(400, 400);

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		setVisible(true);

	}



	@Override

	public void itemStateChanged(ItemEvent e) {

		CardLayout cl = (CardLayout) cards.getLayout();

		cl.show(cards, (String) e.getItem());

	}

}```

Wie kriege ich das hin, dass ich auch andere Objekte als Constraints für das CardLayout benutzen kann?
Für mein Programm ist das mit den Constraints sehr ungeschickt, da die Komponenten, die hinzugefügt werden, zum Zeitpunkt des Programmierens nicht bekannt sind. Natürlich könnte ich mit Random-Integers arbeiten, die ich einen String umwandle, und somit meine Komponenten identifiziere, dass finde ich allerdings ein bisschen gepfuscht... :)

Gruß,
pcworld

dann mach doch einfach was Java sagt :wink:
cards.add(p1, "p1");
:wink: