CardLayout - Anzeigeproblem

Purgator

Aktives Mitglied
Aloha,
ich habe leider ein Problem - es könnte am CardLayout liegen (da ich es das erste mal nutze), ich bin mir aber nicht sicher ob es wirklich daran liegt.
Zum Problem:
Es existieren unter anderem eine JList und ein Panel mit einem CardLayout.
Zudem habe ich eine Klasse "ExtendedPanel", welche von JPanel erbt - ansonsten beinhaltet sie nicht viel mehr derzeit ausser eine extra id-Variable. Diese Id soll der Representator des Panels im CardLayout sein. Denn für jedes Element welches der JList hinzugefügt wird, wird dem CardLayout ein ExtendedPanel hinzugefügt. Je nachdem welches Element in der Liste markiert ist, soll auch das entsprechende Panel im CardLayout angezeigt werden.

Nun habe ich dem ExtendedPanel ein Label hinzugefügt um mich zu überzeugen, dass dieses auch korrekt angezeigt wird.
Leider ist dies nicht der Fall - ich kann das Label nicht sehen.

Da ich nicht erkennen kann wo mein Fehler ist, hoffe ich mir kann jemand sagen wo ich etwas falsch gemacht haben könnte.

Meine Klasse ExtendedPanel sieht so aus:
Java:
public class ExtendedPanel extends JPanel {

	private int id;
	private String name;
	static ArrayList<Integer> ids = new ArrayList<Integer>();

	public ExtendedPanel(int id, String name) {
		super();
		ids.add(id);
		this.id = id;
		this.name = name;
		setLayout(new BorderLayout(0, 0));

		JLabel label = new JLabel("New label");
		add(label, BorderLayout.NORTH);
	}

	public static int nextFreeId() {
		int i = 0;
		while (ids.contains(i)) {
			i++;
		}
		return i;
	}

	public void removeId() {
		ids.remove((Integer) id);
	}

	public int getId() {
		return id;
	}
}
und meine Hauptklasse mit der GUI folgendermaßen (Zeile 78 beginnt die Methode wo ich das Panel dem CardLayout hinzufüge):
Java:
public class QuestionCreator extends JFrame {

	private JList overviewList;
	private DefaultListModel listModel;
	private JTextField newTextField;
	private JButton removeButton;
	private JPanel creatorOverviewPanel;
	private CardLayout cardLayout;
	private ArrayList<ExtendedPanel> questions;
	private JButton newButton;
	private JPanel contentPane;
	private JPanel overviewPanel;
	private JPanel overviewSouth;
	private JPanel overviewTextPanel;
	private JPanel overviewActionPanel;
	private JPanel creatorPanel;
	private JPanel creatorMenuPanel;
	private JTextArea creatorMenuTextArea;
	private JPanel panel;
	private JComboBox creatorMenuComboBox;
	private JButton creatorMenuAdd;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					QuestionCreator frame = new QuestionCreator();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * GUI-Initialisierung aufrufen und Listener etc. setzen
	 */
	public QuestionCreator() {
		initGUI();

		// "Startfrage" generieren
		addQuestion(0, 0, "Frage 1");
		overviewList.setSelectedIndex(0);

		overviewList.addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent e) {
				if (e.getValueIsAdjusting() == false) {
					if (overviewList.getSelectedIndex() == -1) {
						removeButton.setEnabled(false);
					} else {
						removeButton.setEnabled(true);
						cardLayout.show(creatorOverviewPanel, ""
								+ questions
										.get(overviewList.getSelectedIndex())
										.getId());
					}
				}
			}
		});

		// Hier stehen nur ActionListener für die Buttons
	}

	/**
	 * Methode um eine neue Frage hinzuzufügen (in der Frage-Liste hinten
	 * drangehongen) Fügt element in der Frageliste (questions), der Liste
	 * (listModel) und dem cardLayout ein
	 * 
	 * @param cardIndex
	 *            index im Cardlayout (nicht veränderbar)
	 * @param name
	 *            Darstellungsname in der JList sowie erste Überschrift
	 */
	private void addQuestion(int cardIndex, int listIndex, String name) {
		// Extended Panel erstellen
		questions.add(new ExtendedPanel(cardIndex, name));
		// Panel in das CardLayout einfügen
		cardLayout.addLayoutComponent(questions.get(questions.size() - 1), ""
				+ cardIndex);
		// In die Liste einfügen - und markieren
		listModel.insertElementAt(name, listIndex);
		overviewList.ensureIndexIsVisible(listIndex);
		overviewList.setSelectedIndex(listIndex);
		newTextField.setText("");
	}

	/**
	 * GUI-Elemente initialisieren und Layout aufbauen
	 */
	private void initGUI() {
		questions = new ArrayList<ExtendedPanel>();
		listModel = new DefaultListModel();

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 638, 458);

		contentPane = new JPanel();
		setContentPane(contentPane);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));

		// Linke Seite
		overviewPanel = new JPanel();
		contentPane.add(overviewPanel, BorderLayout.WEST);
		overviewPanel.setPreferredSize(new Dimension(175, 10));
		overviewPanel.setMinimumSize(new Dimension(175, 10));
		overviewPanel.setLayout(new BorderLayout(0, 0));

		overviewList = new JList();
		overviewPanel.add(overviewList, BorderLayout.CENTER);
		overviewList.setModel(listModel);
		overviewList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

		overviewSouth = new JPanel();
		overviewPanel.add(overviewSouth, BorderLayout.SOUTH);
		overviewSouth.setLayout(new GridLayout(2, 1, 0, 0));

		overviewTextPanel = new JPanel();
		overviewSouth.add(overviewTextPanel);

		newTextField = new JTextField();
		newTextField.setColumns(10);
		overviewTextPanel.add(newTextField);

		overviewActionPanel = new JPanel();
		overviewSouth.add(overviewActionPanel);

		newButton = new JButton("Neu");
		overviewActionPanel.add(newButton);

		removeButton = new JButton("Entfernen");
		removeButton.setEnabled(false);
		overviewActionPanel.add(removeButton);

		// rechte Seite
		creatorPanel = new JPanel();
		contentPane.add(creatorPanel, BorderLayout.CENTER);
		creatorPanel.setLayout(new BorderLayout(0, 0));

		creatorOverviewPanel = new JPanel();
		creatorPanel.add(creatorOverviewPanel, BorderLayout.CENTER);
		cardLayout = new CardLayout();
		creatorOverviewPanel.setLayout(cardLayout);

		creatorMenuPanel = new JPanel();
		creatorPanel.add(creatorMenuPanel, BorderLayout.SOUTH);
		creatorMenuPanel.setMinimumSize(new Dimension(10, 75));
		creatorMenuPanel.setPreferredSize(new Dimension(10, 75));

		creatorMenuTextArea = new JTextArea();
		creatorMenuTextArea.setPreferredSize(new Dimension(250, 60));
		creatorMenuTextArea.setMinimumSize(new Dimension(250, 60));
		creatorMenuPanel.add(creatorMenuTextArea);

		panel = new JPanel();
		panel.setPreferredSize(new Dimension(100, 60));
		panel.setMinimumSize(new Dimension(100, 60));
		creatorMenuPanel.add(panel);
		panel.setLayout(new GridLayout(2, 1, 0, 0));

		creatorMenuComboBox = new JComboBox();
		creatorMenuComboBox.setModel(new DefaultComboBoxModel(new String[] {
				"JLabel", "JTextField", "JTextArea", "JComboBox", "JCheckBox",
				"JRadioButton" }));
		panel.add(creatorMenuComboBox);

		creatorMenuAdd = new JButton("Hinzuf\u00FCgen");
		panel.add(creatorMenuAdd);
	}
}
 
S

SlaterB

Gast
das JPanel erst in eine Liste einzufügen und dann mit list.get(list.size() - 1) wieder rauszuholen ist ja nicht so geschickt

dein Fehler ist, dass du das Panel nicht dem umgebenden Panel hinzufügst, das ist unausweichlich:

ExtendedPanel p = new ExtendedPanel(cardIndex, name);
questions.add(p);
creatorOverviewPanel.add(p, "" + cardIndex);
 

Purgator

Aktives Mitglied
Danke...
im Nachhinein muss ich sagen, da hätte ich selbst drauf kommen können.
Und danke auch für den Hinweis mit den Panel - war wirklich nicht optimal meine vorgehensweise da.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Von Menü: Seite zu Seite springen (CardLayout) AWT, Swing, JavaFX & SWT 8
H CardLayout beschränken AWT, Swing, JavaFX & SWT 2
P CardLayout funktioniert fehlerhaft AWT, Swing, JavaFX & SWT 13
L Java- CardLayout AWT, Swing, JavaFX & SWT 10
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
A Swing CardLayout - kein Wechsel möglich AWT, Swing, JavaFX & SWT 5
J CardLayout AWT, Swing, JavaFX & SWT 3
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
padde479 LayoutManager CardLayout wechselt die Karten nicht AWT, Swing, JavaFX & SWT 5
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
F CardLayout.show() funktioniert teilweise nicht AWT, Swing, JavaFX & SWT 5
F Swing Cardlayout aufräumen AWT, Swing, JavaFX & SWT 4
U CardLayout im Applet AWT, Swing, JavaFX & SWT 4
Q CardLayout und Klassenmethodenzugriff AWT, Swing, JavaFX & SWT 11
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
C Swing CardLayout dynamisch erweitern AWT, Swing, JavaFX & SWT 11
H cardlayout und jscrollpane AWT, Swing, JavaFX & SWT 14
C CardLayout in BorderLayout? AWT, Swing, JavaFX & SWT 36
W Swing Probleme mit CardLayout AWT, Swing, JavaFX & SWT 28
D JMenuBar - CardLayout (Klasse anzeigen) AWT, Swing, JavaFX & SWT 3
D JSplitPane, Jtree, CardLayout (constraint must be a string) AWT, Swing, JavaFX & SWT 9
S LayoutManager Card des CardLayout mit MenuItem auswaehlen AWT, Swing, JavaFX & SWT 9
B RootPane bzw CardLayout Transparent machen AWT, Swing, JavaFX & SWT 7
L CardLayout - Show klappt nicht AWT, Swing, JavaFX & SWT 7
D Richtige implimentierung eines CardLayout AWT, Swing, JavaFX & SWT 3
I LayoutManager CardLayout mit anonymen Components AWT, Swing, JavaFX & SWT 4
Private Void LayoutManager Cardwechsel im CardLayout auch von Card aus? AWT, Swing, JavaFX & SWT 6
E LayoutManager Erster Versuch mit Cardlayout AWT, Swing, JavaFX & SWT 2
hdi LayoutManager Problem mit CardLayout AWT, Swing, JavaFX & SWT 11
C Problem mit CardLayout :( AWT, Swing, JavaFX & SWT 10
Dragonfire Swing CardLayout Maximum Size AWT, Swing, JavaFX & SWT 7
klattiator CardLayout - Cards auf Existenz prüfen AWT, Swing, JavaFX & SWT 3
S Frage/Problem CardLayout AWT, Swing, JavaFX & SWT 2
H CardLayout - Card erstellen hinzufügen usw. bis MI (12.3.) AWT, Swing, JavaFX & SWT 2
F CardLayout.show() -> NullPointerException AWT, Swing, JavaFX & SWT 4
G CARDLAYOUT AWT, Swing, JavaFX & SWT 2
D GroupLayout an un plötzlich is CardLayout Funktion tot? AWT, Swing, JavaFX & SWT 10
J CardLayout AWT, Swing, JavaFX & SWT 10
J CardLayout AWT, Swing, JavaFX & SWT 2
J Hilfe CardLayout AWT, Swing, JavaFX & SWT 3
H Cardlayout AWT, Swing, JavaFX & SWT 3
M CardLayout: Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Dialogfenster wird nicht aktualisiert/CardLayout AWT, Swing, JavaFX & SWT 6
m@nu StackOverflowError mit CardLayout? AWT, Swing, JavaFX & SWT 2
R CardLayout bei einem Quiz AWT, Swing, JavaFX & SWT 9
J Designfehler beim CardLayout() AWT, Swing, JavaFX & SWT 4
S Registerkarte mit CardLayout (AWT) erstellen ? AWT, Swing, JavaFX & SWT 6
D CardLayout Plus ? AWT, Swing, JavaFX & SWT 4
T CardLayout Ohne Cards/Reiter AWT, Swing, JavaFX & SWT 2
O Swing JFrame Anzeigeproblem AWT, Swing, JavaFX & SWT 2
P JTable Anzeigeproblem AWT, Swing, JavaFX & SWT 3
Mr. Pink AWT Anzeigeproblem JPanel/Hintergrundbild AWT, Swing, JavaFX & SWT 1
C Swing Anzeigeproblem mit TableModels abhängig von deren Inhalt AWT, Swing, JavaFX & SWT 10
B JMenuItem Anzeigeproblem AWT, Swing, JavaFX & SWT 6
F PDF-Anzeigeproblem Tool Multivalent AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben