Allgemeine Frage zur Unterbringung von allgemeinen Daten einer Applikation

Status
Nicht offen für weitere Antworten.

slowstarter

Mitglied
Hallo!

Mein Problem ist ein nicht ganz GUI- und auch nicht Java-spezifisch, es stellt sich mir aber in diesem Zusammenhang. Auch gibt es hier wahrscheinlich kein richtig oder falsch aber wahrscheinlich hat sich eine Herangehensweise als die beste herauskristalisert.

Wie es aussieht: Ein Programm in einem Frame, Menüleiste, Toolbar und TabPanel. In jedem Tab befindet sich ein JPanel mit mehreren Componenten wie Buttons, Listen usw. die zur Anzeige und Manipulation von Daten über ein Netzwerk dienen. Jedes Tab repräsentiert eine eigene Verbindung zu einem Server.

Die Frage ist nun, wo sollte der Zustand, die Sessioninformation was die Verbindung zum Server angeht gespeichert werden? Als Felder in einer Subclass des JPanels, also gekapselt nahe der Darstellung?
Oder als Objekte in einer globalen Liste/Map?

Handelt es sich bei zu haltenden Daten um welche die in einer Component dargestellt werden kommen die in dessen Model. Nur Metainformationen einer Session gehören doch an sich keiner Componente. Globale Arrays andererseits passen irgendwie nicht in OOP und MVC.
Beides hat seine Vor- und Nachteile. In beiden Fällen muß jede Componenteninstanz die Zugriff auf die Daten benötigt wissen zu welcher Session bzw. welchem Session Panel sie gehört. In der lokalen Variante müssen zusätzlich alle Accessorfunktionen bis zur Datenklasse durchgereicht werden.

Gibt es bessere Methoden?


Nachfolgend minimale (nicht lauffähige und auf Fehlerprüfung verzichtende) Beispiele zu beiden Herangehensweisen. Für die, die lieber Code lesen.

Local
Java:
public class LocalState extends JFrame {
    public static void main(String[] args) {
        LocalState main = new LocalState();
        main.initGUI();
    }

    private void initGUI() {
        final JTabbedPane tabPane = new JTabbedPane();
        JToolBar toolbar = new JToolBar();
        JButton tButton = new JButton();
        tButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                SessionPane sp = (SessionPane) tabPane.getSelectedComponent();
                sp.setOnline(true);
            }
        });
        toolbar.add(tButton);
        getContentPane().add(toolbar, BorderLayout.NORTH);

        JPanel mainPane = new JPanel();
        getContentPane().add(mainPane, BorderLayout.CENTER);
        mainPane.add(tabPane);

        Object tab = tabPane.add("empty1", new SessionPane());
        Session.addSession(tab);
    }
}

class SessionPane extends JPanel {
    Session2 session = new Session2();

    public SessionPane() {
        JButton button = new MyButton(session);
        add(button);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                session.setOnline(true);
            }
        });
    }

    public void setOnline(boolean b) {
        session.setOnline(b);
    }

    // Mehr Accessor-Methoden für Session
}

class MyButton extends JButton {
    private final Session2 session;

    public MyButton(Session2 s) {
        session = s;

        JButton button = new JButton();
        add(button);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                session.setOnline(true);
            }
        });
        add(new JList());
    }
}

class Session2 {
    private String host = null;
    private boolean online = false;
    private String page = null;

    public Session2() {
    }

    public void setOnline(boolean b) {
        online = b;
    }

    // Mehr Accessor-Methoden
}

Global
Java:
class Session {
    public static HashMap<Object, Session> hm = new HashMap<Object, Session>();

    private String host = null;
    private boolean online = false;
    private String page = null;

    public Session() {
    }

    public static void addSession(Object o) {
        hm.put(o, new Session());
    }

    public void setOnline(boolean b) {
        online = b;
    }

    // Mehr Accessor-Methoden
}

public class GlobalState extends JFrame {
    public static void main(String[] args) {
        GlobalState main = new GlobalState();
        main.initGUI();
    }

    private void initGUI() {
        final JTabbedPane tabPane = new JTabbedPane();
        JToolBar toolbar = new JToolBar();
        JButton tButton = new JButton();
        tButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Object o = tabPane.getSelectedComponent();
                Session.hm.get(o).setOnline(true);
            }
        });
        toolbar.add(tButton);
        getContentPane().add(toolbar, BorderLayout.NORTH);

        JPanel mainPane = new JPanel();
        getContentPane().add(mainPane, BorderLayout.CENTER);
        mainPane.add(tabPane);

        Object tab = tabPane.add("empty1", new SessionPane());
        Session.addSession(tab);
    }
}

class SessionPane extends JPanel {
    public SessionPane() {
        JButton button = new MyButton(this);
        add(button);
    }
}

class MyButton extends JButton {
    private final SessionPane sessionPane;

    public MyButton(SessionPane sp) {
        sessionPane = sp;

        JButton button = new JButton();
        add(button);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Session.hm.get(sessionPane).setOnline(true);
            }
        });
        add(new JList());
    }
}
 

rik0

Mitglied
Benutzt du MVC?

Wenn ich's richtig verstehe, würde ich die Daten ins Modell legen. Das View sollte Daten ja nur anzeigen.

Warum muss jede Komponente wissen, zu welcher Session sie gehört? Der Controller sollte über Benutzeraktionen auf der View benachrichtigt werden (ActionListener), entsprechend reagieren(Datenmanipulation) und dann wiederum die betroffenen Komponenten aktualisieren, sodass die neuen Daten angezeigt werden.

Gruß
 

slowstarter

Mitglied
Wenn ich's richtig verstehe, würde ich die Daten ins Modell legen. Das View sollte Daten ja nur anzeigen.
Sagen wir mal es gibt drei Elemente in einem Panel: Einen Button der die Verbindung mit einem Server auslöst bzw. beendet, ein Editfeld das den aktuellen Pfad auf dem Server anzeigt bzw. ändern kann und ein Liste das Dateien in dem Pfad anzeigt.
Die Dateiliste liegt natürlich im Model des Liste. Aber die Metainformationen, Daten zum Verbindungsmanagement, gehören weder dahin noch in den Button oder das Editfeld, oder?

Und was passiert bei Änderung des Pfades im Editfeld? Updated das Editfeld das Listenmodel, ändert das Editfeld ein Feld in den Metadaten und über einen PropertyListener bekommt die Liste das mit und updated sich selbst? Was ist im umgekehrten Fall des Verzeichniswechsels über Interaktion in der Liste?

Warum muss jede Komponente wissen, zu welcher Session sie gehört? Der Controller sollte über Benutzeraktionen auf der View benachrichtigt werden (ActionListener), entsprechend reagieren(Datenmanipulation) und dann wiederum die betroffenen Komponenten aktualisieren, sodass die neuen Daten angezeigt werden.
Ich habe ein Problem damit, dass ich hier an sich mehrere Componenten habe, die unterschiedliche Aspekte oder Ansichten einer Verbindung repräsentieren, sowohl im V als auch C von MVC. Also passt das M in keine der Componenten, alle müssen aber damit arbeiten können.

Und dann kommen noch Elemente wie Buttons in einer Toolbar dazu, die außerhalb des in meinem ersten Beitrag erwähnten Tabpanel liegen, also beim besten Willen nicht in eine Klassenhierarchie passen. Sowohl zum Zweck einen Listener hinzufügen als auch die Verbindung manipulieren zu können benötigen die auch Zugriff auf o.g. Metainformationen.

Das riecht alles so sehr nach globalen Variablen, aber das kanns doch nicht sein.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
E Swing Allgemeine Frage zur Struktierung und Umsetzung AWT, Swing, JavaFX & SWT 2
F Allgemeine Frage über Fenster in Anwendungen AWT, Swing, JavaFX & SWT 2
B Allgemeine Frage zu Look&Feel AWT, Swing, JavaFX & SWT 2
T Allgemeine Frage - innovatives GUI Design AWT, Swing, JavaFX & SWT 6
M Allgemeine Frage zur Methodik & ein paar spezielle Probl AWT, Swing, JavaFX & SWT 4
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
thor_norsk Allgemeine Fragen AWT, Swing, JavaFX & SWT 6
thor_norsk Allgemeine Fragen AWT, Swing, JavaFX & SWT 4
Lukas2904 LookAndFeel Wie ändere ich das allgemeine Disigne des Fensters? AWT, Swing, JavaFX & SWT 4
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
T JavaFX Allgemeine Fragen zu JavaFX (uA zu Properties) AWT, Swing, JavaFX & SWT 6
K Allgemeine Technik bei Bildverdunklung in Spielen AWT, Swing, JavaFX & SWT 6
J Allgemeine Designfrage ! AWT, Swing, JavaFX & SWT 3
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben