Gescheit die Event handeln in ner GUI



  • Hallo

    Wenn ich bisher immer gui's gebaut habe, habe ich alle Events direkt im jframe behandelt. Aber irgentwie ist es ja um einiges besser gui und eventhandling zu trennen. Wie kann man das gescheit machen??

    Es gibt ja die Klasse Observer. Aber wie kann ich das gut aufbauen?
    Ich habe mich unten mal probiert. Was kann man daran verbessern bzw. wie macht ihr das?

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Observable;
    import java.util.Observer;
    import javax.swing.*;
    
    public class GUITest {
    	public static void main(String[] args) {
    		new Document();
    	}
    }
    
    class GUI extends JFrame implements ActionListener {
    	EventHandler handler = null;
    
    	GUI(EventHandler handler) {
    		super("MyFrame");
    		this.handler = handler;
    
    		Container con = this.getContentPane();
    		JPanel pan = new JPanel();
    		JButton but = null;
    
    		for (int i = 0; i <= 49; ++i) {
    			but = new JButton("Knopf: " + (i + 1));
    			but.addActionListener(this);
    			pan.add(but);
    		}
    		con.add(pan);
    
    		setBounds(100, 100, 400, 430);
    		setVisible(true);
    	}
    
    	public void actionPerformed(ActionEvent event) {
    		handler.actionEvent(event);
    	}
    
    }
    
    class Document implements Observer {
    	EventHandler handler = new EventHandler();
    	GUI gui = null;
    
    	Document() {
    		handler.addObserver(this);
    
    		gui = new GUI(handler);
    	}
    
    	public void update(Observable arg0, Object arg1) {
    		if (arg1.getClass().toString().equals("class java.awt.event.ActionEvent")) {
    			System.out.println("Action: " + ((ActionEvent) arg1).getActionCommand());
    		}
    	}
    }
    
    class EventHandler extends Observable {
    	public void actionEvent(ActionEvent event) {
    		setChanged();
    		notifyObservers(event);
    	}
    }
    


  • das fällt mir ja auch nocht ein. Das was ich da gemacht habe ist eigentlich das selbe in grün wie mit dem actionlistener im jframe.

    bei meiner Klasse class EventHandler extends Observable {

    kann ich ja nur Objecte anmelden die das interface Observer implementiert haben. Und das haben die Standard elemente von swing jbutton.. nicht implementiert.



  • Hallo,

    Du kannst die actionListener in vom GUI getrennten Klassen implementieren. Sowas nennt man dann "Controller", das Teil was für die Anzeige zuständig ist heißt "View". Wenn du dann noch Daten hast und die getrennt speicherst, heißt das ganze MVC - Model View Controller. Ist ein Pattern und ganz toll wenn man in einem Programm eine komplexe Benutzerschnittstelle hat.


Anmelden zum Antworten