Ich habe folgendes Problem
Es gibt ein grosses Programm, wo der Anwender Neues hinzufügen kann oder Änderungen vornehemen kann. Dies geschiet mit drücken der "save" Taste, dort wird dann ein Event abgesetzt. Klassen (Ev_Kl_1 und Ev_Kl_2).
Ich abstrahire von das ganze Rest, muss jedes mal wenn der Anwender "save" drückt ein Feedback ausgeben. Im Prinzip sollte es so funktionieren:
import javax.swing.*;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.*;
import java.awt.image.ImageObserver;
public class fensterTest2 implements ActionListener{
JButton button;
private int anzahlLocClicks = 10;
private int anzahlGlobalClicks = 10;
private int prozentAnzeige;
public static void main(String args[]){
fensterTest2 gui = new fensterTest2();
gui.startEvent();
}
public void startEvent(){
JFrame displayFenster = new JFrame(); // hier definiere ich mein fenster, unten die eigenschaften
button = new JButton("Start Mein Event");
button.addActionListener(this); //registriere bei Button, werde in Liste aufgenommen ->
// Argument MUSS objekt Klasse die ActionListener implementiert
displayFenster.getContentPane().add(button);
displayFenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
displayFenster.setSize(600,300);
displayFenster.setVisible(true);
}
public void actionPerformed(ActionEvent event){ // hier gibt aus was passiert wenn event eingetretten
button.setText("Du bist "+ prozentAnzeige + "% BESSER als der Rest!!!!");
prozentAnzeige = (anzahlLocClicks*100)/anzahlGlobalClicks;
anzahlLocClicks++;
anzahlGlobalClicks = anzahlGlobalClicks+3;
button.revalidate(); //hier kann ich noch mal klicken ...
}
}
Ich möchte dass wenn ein Event eingetretten ist, die zwei Variablen erhöht werden UND dass ein Feedback in Fenster ausgegeben wird. Feedback wenn möglich aus einer Klasse, damit später dieses den Wünschen angepasst werden kann.
Bis jetzt habe ich es so implementiert, mit dummy variablen und ohne Fenster.
Klassen
a) Interfaces
a1)Observer Interface:
public interface FeedbackObserver{
public void update (int anzahlLocClicks, int anzahlGlobalClicks);
}
___________________
a2) feedback Simulator Interface
public interface FeedbackSimulatorInterface {
public void registerFeedbackObserver(FeedbackObserver FB);
public void removeFeedbackObserver(FeedbackObserver FB);
public void notifyFeedbackObservers();
}
___________________
a3) feedback Anzeige Interface
public interface ShowFeedback {
public void feedback();
}
___________________
Observer:
public interface FeedbackObserver{
public void update (int anzahlLocClicks, int anzahlGlobalClicks);
}
___________________
Simulation von der Eigentlicher Klasse wo das Event eintritt
PROBLEM: EVENT IMPLEMENTIEREN welches Fenster aufruft UND Variablen updatet.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JFrame;
public class FeedbackSimulator implements FeedbackSimulatorInterface{
private ArrayList observerListe;
private int anzahlGlobalClicks;
private int anzahlLocClicks;
public FeedbackSimulator(){
observerListe = new ArrayList();
}
/*jetzt gibt es die Observer registrierer
*/
public void registerFeedbackObserver(FeedbackObserver FB){
observerListe.add(FB);
}
public void removeFeedbackObserver(FeedbackObserver FB){ // observer löschen
int delObs = observerListe.indexOf(FB);
if (delObs >= 0) {observerListe.remove(FB);}
}
public void notifyFeedbackObservers(){
for (int delObs = 0; delObs < observerListe.size(); delObs++ ){
FeedbackObserver konkretesObserver = (FeedbackObserver)observerListe.get(delObs);
konkretesObserver.update(anzahlLocClicks, anzahlLocClicks);
}
}
public void eventEingetretten() { // hier nur um Event zu simulieren, später an den Richtigen Event dranhängen
anzahlLocClicks = anzahlLocClicks++;
anzahlLocClicks = anzahlLocClicks+3;
notifyFeedbackObservers();
}
public void variablenTest(int anzahlLocClicks, int anzahlGlobalClicks){ // zum Testen wenn unsere zwei Variablen
// anzahlGlobalClicks / anzahlLocClicks geändert wurden
this.anzahlLocClicks = anzahlLocClicks;
this.anzahlGlobalClicks = anzahlGlobalClicks;
eventEingetretten();
}
}
___________________
Testklasse um zu sehen ob der Feeback funktioniert, geht leider nur mit Dummy Variablen von Hand eingegeben.
/*import javax.swing.*;
import java.awt.Frame;
import java.awt.event.*;
public class feedbackTester {
public static void main(String args[]){
FeedbackSimulator feedbackSimulator = new FeedbackSimulator();
ShowFeedbackHistory feedbackHistory = new ShowFeedbackHistory(feedbackSimulator);
ShowFeedbackGratitude feedbackGratitude = new ShowFeedbackGratitude(feedbackSimulator);
ShowFeedbackRelative1 feedbackRelative1 = new ShowFeedbackRelative1(feedbackSimulator);
//hier paar testwerte das müsste der Hauptprogram liefern
feedbackSimulator.variablenTest(17,17);
try
{
Thread.sleep(1000); // 1000 milisekunden pause
}
catch(InterruptedException e){
}
feedbackSimulator.variablenTest(10,100);
try
{
Thread.sleep(1000); // 1000 milisekunden pause
}
catch(InterruptedException e){
}
feedbackSimulator.variablenTest(20,75);
try
{
Thread.sleep(1000); // 1000 milisekunden pause
}
catch(InterruptedException e){
}
feedbackSimulator.variablenTest(30,100);
}
}
FRAGE: wo und wie muss ich mein Event schreiben (klick event), und wie bekomme ich das Fenster hin.
Hoffe es ist nicht zu kompliziert vormuliert um mein Anliegen zu verstehen.
Danke schon in Voraus für Hilfe, Ideen, Vorschläge ....