Hey Leute,
ich habe mich heute ungefähr 8 std lang in Observer Pattern eingelesen, trotzdem versteh ich das nicht ganz. Das Grundkonzept das etwas informiert wird verstehe ich aber ich denke die Umsetzung ist sehr komplex.
Unzwar wollte ich dem JFrame informieren wenn eine neue Transaktion geaddet wurde in die Liste. Dabei besteht mein Frame aus 2 Grundpanels (Ich nenne sie mal so). Das eine gibt die per toString wieder und das andere wiederspiegelt die Transaktionen in einen Tortendiagramm.
Dies ist ein kurz-Abschnitt von der Klasse Konto(extends Observable). Dazu sei noch gesagt das die Arraylisten funktionieren. Konto verwaltet für die Transaktionen die Arraylist
Ihr Fragt euch sicherlich woher denn die Transaktion eingelesen wird. Diese wird in der Klasse TransaktionsframeMenueFunktion in einer separate Menue Punkt eingelesen.
Hier kommen jetzt die Klassen hinein, die Observer implementieren. Ich denke da ist halt das verständnis Problem welche Aufgabe eigentlich die update()-Methode hat. Es soll updaten ok aber ich muss ja ihn irgendwas hinschreiben und da verliere ich halt das verständnis, da auch diese Methode nirgends abgerufen wird.
TransaktionsSignal
PieChart
Tut mir echt Leid für den langen Post, ich bin mir sehr unsicher welche Informationen für einen Entwickler Relevant sind. Ich hoffe ihr könnt mir vorschläge geben da ich nichts im Internet gefunden habe.
Mit freundlichen Grüßen
GreenTea
ich habe mich heute ungefähr 8 std lang in Observer Pattern eingelesen, trotzdem versteh ich das nicht ganz. Das Grundkonzept das etwas informiert wird verstehe ich aber ich denke die Umsetzung ist sehr komplex.
Unzwar wollte ich dem JFrame informieren wenn eine neue Transaktion geaddet wurde in die Liste. Dabei besteht mein Frame aus 2 Grundpanels (Ich nenne sie mal so). Das eine gibt die per toString wieder und das andere wiederspiegelt die Transaktionen in einen Tortendiagramm.
Dies ist ein kurz-Abschnitt von der Klasse Konto(extends Observable). Dazu sei noch gesagt das die Arraylisten funktionieren. Konto verwaltet für die Transaktionen die Arraylist
Java:
public class Konto extends Observable implements Comparable<Konto> {
private ArrayList<Transaktion> transaktionListe = new ArrayList<Transaktion>();
public ArrayList<Transaktion> getTransaktionListe() {
return transaktionListe;
}
public void setTransaktionListe(ArrayList<Transaktion> transaktionListe) {
this.transaktionListe = transaktionListe;
}
public void addTransaktion(Transaktion transaktion) {
setChanged();
this.transaktionListe.add(transaktion);
notifyObserver();
//hier würde ich Beobachten ob eine neu Transaktion in die Arraylist geaddet wurde
}
}
Java:
public void transEinlesenFunktion(){
JDialog jD = new JDialog();
jD.setTitle("Transaktion Einlesen");
jD.setVisible(true);
JTextField iban = new JTextField();
JTextField transaktionsart = new JTextField();
JTextField betrag = new JTextField();
JTextField beschreibung = new JTextField();
JPanel jP = new JPanel();
jP.setLayout(new GridLayout(0, 2, 1, 1));
jP.add(new JLabel("IBAN: "));
jP.add(iban);
jP.add(new JLabel("Transaktionart: "));
jP.add(transaktionsart);
jP.add(new JLabel("Betrag: "));
jP.add(betrag);
jP.add(new JLabel("Beschreibungstext: "));
jP.add(beschreibung);
double betragConverter = Double.parseDouble(betrag.getText());
JButton b1 = new JButton("Einlesen");
b1.setMnemonic('h');
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(b1)) {
for (Kunde kunde : bank.getKundeList()) {
for (Konto konto : kunde.getKonto()) {
for (Transaktion transaktion : konto.getTransaktionListe()) {
konto.addTransaktion(new Transaktion(iban.getText(), transaktion.getZeitStempel(), transaktionsart.getText(), beschreibung.getText(), betragConverter));
}
}
}
}
}
});
jP.add(b1);
JButton b2 = new JButton("Abbrechen");
b2.setMnemonic('h');
b2.setActionCommand("abbrechen");
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("abbrechen")) {
jD.dispose();
}
}
});
jP.add(b2);
jD.add(jP);
jD.pack();
}
}
TransaktionsSignal
Java:
public class TransaktionSignalComponent implements Observer {
private Bank bank;
public TransaktionSignalComponent(Bank bank) {
super();
this.bank = bank;
}
public JComponent transaktionsSignal() {
/*
* TODO
* Speziell die Transaktionen von den ausgewaehlten Kunden
*/
JPanel panel = new JPanel(new GridLayout(1, 2)) ;
JTextArea tea= new JTextArea();
tea.setLineWrap(false);
tea.setEditable(false);
tea.setWrapStyleWord(true);
for (Kunde kunde : bank.getKundeList()) {
for (Konto konto : kunde.getKonto()) {
for (Transaktion transaktion : konto.getTransaktionListe()) {
tea.append(transaktion.toString());
tea.append("\n");
//TODO tea.append("Gesamt: "+ (transaktion.getBetrag() + transaktion.getBetrag()) +" Euro");
}
}
}
panel.add(tea);
JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.getVerticalScrollBar().setUnitIncrement(16);
return scrollPane;
}
@Override
public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
}
}
PieChart
Java:
public class PieChartComponent implements Observer{
private Bank bank;
public PieChartComponent(Bank bank) {
super();
this.bank = bank;
}
public JComponent tortenDiagramm() {
JPanel panel = new JPanel(new BorderLayout());
DefaultPieDataset pieDataset = new DefaultPieDataset();
/*
*TODO
*Wenn dieser Kunde gewaehlt ist soll auch nur diese Transaktion gezeigt werden von dem Kunden
*/
for (Kunde kunde:bank.getKundeList()) {
for (Konto konto: kunde.getKonto()) {
if (kunde.getKundenNummer().equals(konto.getKundennr())) {
pieDataset.setValue(konto.getiBAN(), konto.getKontoStand());
}
}
}
JFreeChart chart = ChartFactory.createPieChart("Verteilung", pieDataset, true, true, true);
PiePlot p =(PiePlot) chart.getPlot();
//p.setForegroundAlpha(alpha);
ChartPanel cp = new ChartPanel(chart);
panel.add(cp);
JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.getVerticalScrollBar().setUnitIncrement(16);
return scrollPane;
}
@Override
public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
}
}
Tut mir echt Leid für den langen Post, ich bin mir sehr unsicher welche Informationen für einen Entwickler Relevant sind. Ich hoffe ihr könnt mir vorschläge geben da ich nichts im Internet gefunden habe.
Mit freundlichen Grüßen
GreenTea