Hi, also ich verstehe bei einem Beispiel aus der Vorlesung nicht warum ,um dem Container "Bibliothek" beim Bean-Beobachter anzumelden, dies :
(Wenn die anderen Klassen als Code benötigt werden einfach schreiben
)
geschrieben wurde.
reicht hier nicht einfach das was ich unten gemacht habe? Man will ja bib beim Listener anmelden?
Hier mal der gesamte Code von der Klasse "BibliothekGUI":
Zudem hab ich unten nochmal die Methode propertyChange überschrieben , um die Events abzufragen, wenn ein Buch ausgeliehen, zurückgeben und hinzugefügt wurde. Passt hier das Vorgehen? War mir unsicher bei dem Teil wo ich dem neu hinzugefügten Buch einen neuen Listener hinzugefügt habe.
Gruß
(Wenn die anderen Klassen als Code benötigt werden einfach schreiben
Java:
this.bib.addPropertyChangeListener(this);
reicht hier nicht einfach das was ich unten gemacht habe? Man will ja bib beim Listener anmelden?
Code:
bib.addPropertyChangeListener(this);
Code:
public class BibliothekGUI extends JFrame implements PropertyChangeListener {
private Bibliothek bib;
private JTextArea taDisplay;
public BibliothekGUI(Bibliothek bib) {
super("Universitaetsbibliothek");
setDefaultCloseOperation(EXIT_ON_CLOSE);
bib.addPropertyChangeListener(this); //this.bib.addPropertyChangeListener(this);
this.bib = bib;
taDisplay = new JTextArea(5, 50);
taDisplay.setEnabled(false);
add(new JScrollPane(taDisplay), BorderLayout.NORTH);
JButton btnIsOpen = new JButton("Geoeffnet?");
btnIsOpen.addActionListener(e -> {
String message;
if (this.bib.isOpen()) {
message = "Die Bibliothek hat geoeffnet";
} else {
message = "Die Bibliothek hat nicht geoeffnet";
}
JOptionPane.showMessageDialog(this, message);
});
add(btnIsOpen, BorderLayout.WEST);
JButton btnAddBuch = new JButton("Buch hinzufuegen");
btnAddBuch.addActionListener(e -> {
new AddBook(this, this.bib);
});
add(btnAddBuch, BorderLayout.CENTER);
JButton btnShowBooks = new JButton("Zeige alle Buecher");
btnShowBooks.addActionListener(e -> {
new ShowBooks(this, this.bib);
});
add(btnShowBooks, BorderLayout.EAST);
JButton btnReturnBook = new JButton("Buch zurueckgeben");
btnReturnBook.addActionListener(e -> {
try {
returnBook();
} catch (IllegalLoanException exception) {
String msg = "Fehler beim Zurueckgeben: " + exception.getMessage();
JOptionPane.showMessageDialog(this, msg);
}
});
add(btnReturnBook, BorderLayout.SOUTH);
pack();
setVisible(true);
}
public void appendText(String s) {
taDisplay.append(s);
}
private void returnBook() throws IllegalLoanException {
String title = JOptionPane.showInputDialog(this, "Geben Sie den Titel des Buchs ein," +
"das sie zurückgeben wollen:");
if (bib.zurueckgeben(title)) {
String msg = title + " rechtzeitig zurueckgegeben.";
JOptionPane.showMessageDialog(this, msg);
} else {
String msg = title + " NICHT rechtzeitig zurueckgegeben.";
JOptionPane.showMessageDialog(this, msg);
}
}
public static void main(String[] args) {
Bibliothek bib = Bibliothek.instance();
new BibliothekGUI(bib);
bib.linkBuch(new Buch("Christian Ullenboom", "Java ist auch eine Insel"));
bib.linkBuch(new Buch("Robert Sedgewick", "Einfuehrung in die Programmierung mit Java"));
bib.linkBuch(new Buch("Marc-Uwe Kling", "Qualityland"));
bib.linkBuch(new Buch("David Eddings", "Kind der Prophezeiung"));
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
Buch b;
if(evt.getPropertyName().equals("ausleihen")){
b = (Buch) evt.getNewValue();
if(b == null){
return;
}
String leihen = "Ausgeliehen: " + b;
taDisplay.append(leihen);
} else if (evt.getPropertyName().equals("zurückgeben")) {
b = (Buch) evt.getOldValue();
if(b == null){
return;
}
String zurueckgeben = "Zurückgegeben:" + b;
taDisplay.append(zurueckgeben);
} else if (evt.getPropertyName().equals("Buch hinzugefügt")) {
b = (Buch) evt.getNewValue();
if(b == null){
return;
}
b.addPropertyChangeListener(this);
String addBook = "Neues Buch:" + b;
taDisplay.append(addBook);
}
}
}
Gruß