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:
und meine Hauptklasse mit der GUI folgendermaßen (Zeile 78 beginnt die Methode wo ich das Panel dem CardLayout hinzufüge):
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;
}
}
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);
}
}