Fragen zur Vererbung und Update

Status
Nicht offen für weitere Antworten.

JasonV

Aktives Mitglied
Moin :)

Also, ich habe ein kleines Problem. Mein Editor soll nach erfolgreichem Speichern von einer neuen Datei in ein Vorhandes Verzeichnis die ProjectView aktualisieren - da ja nun eine Datei mehr drin ist. Meine Fragen folgen dann nach dem Code.

Ein Ausschnitt aus meinem Code:
Code:
public class Gui extends JFrame implements ActionListener {
	private ProjectView projectView = new ProjectView();

	private void ClientGuiAufbau() {
                [...]
		JSplitPane SplitView = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, projectView.getPV(), 
                                                        tEditor.getTabbedEditor());
                [...]
        }

	public Gui() {
		ClientFrame = new JFrame();
                [...]
		ClientGuiAufbau();
                [...]
       }

	class ProjectView extends JTree implements MouseListener {
		private JTree pView;
		private DefaultMutableTreeNode root;
		
		public JTree getPV() {
			return pView;
		}

		public void update() {
			projects = getProjectsByName();	
			root = new DefaultMutableTreeNode("Projekte");
			for(int i=0; i<projects.length; i++) {
				addNodes(projects[i][0],projects[i][1], root);
			}
			pView = new JTree(root);
			pView.setRootVisible(false);
			pView.putClientProperty("JTree.lineStyle", "Angled");
			pView.addMouseListener(this);			
		}

		public ProjectView() {
			projects = getProjectsByName();	
			root = new DefaultMutableTreeNode("Projekte");
			for(int i=0; i<projects.length; i++) {
				addNodes(projects[i][0],projects[i][1], root);
			}
			pView = new JTree(root);
			pView.setRootVisible(false);
			pView.putClientProperty("JTree.lineStyle", "Angled");
			pView.addMouseListener(this);
		}
        }
}
Ich verwende Sub-Klassen, um den Aufbau der Gui etwas übersichtlicher zu gestalten.

Nun meine Fragen:
1) Kann ich ohne die Methode getPV() auskommen, so wie es ja eigentlich auch die eigentlichen Klassen tun?

2) Wenn ich nun eine neue Datei in einem Projekt speichere, soll diese auch im "projectView" angezeigt werden. Dazu habe ich bisher eine update()-Methode implemetiert, die im Prinzip das gleiche machen soll wie der Konstruktor: anlegen der Einträge (und ggf. setzen der Eigenschaften). Aber ein repaint() bringt hier leider keinen Erfolg. Mir fehlt da irgendwie der "Sprung" von meiner projectView zum eigentlich JTree.

3) Eine generelle Frage: gibt es einen schöneren (bzw. saubereren) Weg, das zu implementieren, als ich das momentan mache? Vor allem das Ansprechen von ausserhalb der Sub-Klasse scheint mir etwas dumm gelöst (also von mir): projectView.pView.add[..] - was also vergleichbar mit einer eleganten Lösung auf Frage 1 wäre.


Hoffe auf Hilfe.

Beste Grüße,
JasonV
 

Wildcard

Top Contributor
Du brauchst eigene Listener.
Die View ist ein Listener auf dem Model
Im Model wird ein neues Element eingefügt (Datei) -> Model benachrichtigt View über die Listenerschnittstelle.
 

JasonV

Aktives Mitglied
Wildcard hat gesagt.:
Du brauchst eigene Listener.
Die View ist ein Listener auf dem Model
Im Model wird ein neues Element eingefügt (Datei) -> Model benachrichtigt View über die Listenerschnittstelle.
Hm. Was für einen Listener und an welcher Stelle? Ein Listener für "projectView"?
 

Wildcard

Top Contributor
Du musst doch irgendwo beispielsweise die Datein verwalten.
An dieser Stelle weißt du welche Dateien du hast und nur dort dürfen dann auch neue Dateien angelegt werden.
Jede Komponente deiner Anwendung die sich dafür Änderungen an den Dateien interessiert implementiert dann beispielsweise IDateiMangerListener mit fileAdded, fileRemoved, fileChanged Methoden.
Wenn du jetzt eine Datei änderst machst du das über denn 'Manager'.
Der ruft anschließend fireFileAdded auf. In dieser Methode informierst du dann alle Listener die sich vorher auf dem Manager registriert haben über die Änderung.
Diese können dann auf die Events reagieren (Im Falle deiner View würde das dann heißen das die neue Datei in den Baum aufgenommen wird).
Schau dir einfach mal an wie Swing funktioniert. Da hast du überall Listener...
Das ganze nennt sich Observer-Pattern (siehe FAQ oder Wiki)
 

JasonV

Aktives Mitglied
Wildcard hat gesagt.:
Du musst doch irgendwo beispielsweise die Datein verwalten.
Hmmm... hatte das bisher so gelöst, dass Änderungen (speichern, schliessen) in der jeweiligen AbstractAction implementiert sind. Mehr als Speichern, Schliessen kommt ja eigentlich nicht vor.

Wenn ich Dich also richtig verstehe:
- In der GuiKomponente (also z.B. ProjectView) füge ich die Methode update(Observable o, Object update) hinzu und sage ihr hier, lade die Projekt-Daten neu + zeige sie dann an
- ich sollte eine Klasse basteln, die sich explizit um die Verwaltung der Daten kümmert - sprich das Löschen, Speichern etc. übernimmt.
- der Klasse drücke ich ein Observable auf
- eine Methode saveFile führt den Speicher-Code aus und macht ein notifyObservers()
- drücke ich save --> Ausführen der Action, in der ich ein neues Objekt der Klasse "Datei" anlege, darauf registriere ich den Observer über "neueDatei.addObserver(MeineGuiKomponente)" und führe dann die Methode "saveFile" der Klasse Datei aus
(==> also ist die GuiKomponente der Observer und meine Klasse fürs Managen der Daten eine Observable?)

So hab ich das jetzt verstanden (anhand Deiner Aussage + der FAQ zu den Observer-Patterns).
 

Wildcard

Top Contributor
Richtig. Die Details (zB wie granular man das ganze Aufteilt usw.) hängen von der Struktur deines Projekts ab, aber das ist das Prinzip. Du musst auch nicht die Java Obersable/Observer Interfaces verwenden, sondern kannst da was eigenes nehmen.
Nur auf die grob-Struktur kommt's an.
Pass aber auf das es zu jeder addListener Methode auch ein removeListener Methode gibt, damit du keine Speicherleichen bekommst (alternativ kann man zB auch WeakReferences verwenden, aber das ist vielleicht zu viel auf einmal...)
 

JasonV

Aktives Mitglied
Danke, werde mich mal dransetzen und das probieren. Hört sich von der Idee her ganz gut an. Das sollte Frage 2 beantworten.


Bleiben nur noch die Fragen 1+3.
 

Wildcard

Top Contributor
Frage 3 hab ich nicht verstanden.
Frage 1 auch nicht so richtig. Da hat's bei mir ehrlich gesagt schon aufgehört als ich gesehen habe das ProjectView ein JTree ist, der einen JTree hat :autsch: :wink:
 

JasonV

Aktives Mitglied
Wildcard hat gesagt.:
Frage 3 hab ich nicht verstanden.
Frage 1 auch nicht so richtig. Da hat's bei mir ehrlich gesagt schon aufgehört als ich gesehen habe das ProjectView ein JTree ist, der einen JTree hat :autsch: :wink:
Genau das ist mein Problem. Wie löst man es eleganter? Das hab ich irgendwie nicht so ganz kapiert :)

Im Haupt-Teil der Gui lege ich ein ProjectView an, welches eigentlich ein JTree ist. Aber ich komme an den JTree irgendwie nicht ran, ausser ich setze nach dem Initialisieren mein ProjectView auf den JTree, den ich erzeuge.

Verwirrend, ich weiss. Eine schönere Lösung würde mich auch glücklicher machen (und Frage 3 evt. direkt mitbeantworten).
 

Wildcard

Top Contributor
Du musst dich entscheiden:
Entweder du bist (erbst von/erweiterst) ein JTree, oder du instanzierst einen JTree und verwendet ihn.
Und bevor du dich fragen kannst wie du aus anderen Objekten auf den Tree zugreifen kannst, musst du dich fragen warum(oder ob) du darauf zugreifen musst.
 

JasonV

Aktives Mitglied
Nun, eigentlich wollte ich ihn instanzieren - der Übersichtlichkeit halber (und weil ich die Methoden wie z.B. hier getProjects nur innerhalb der Instanz benötige) habe ich das aber als Klasse gemacht, die von JTree erbt. So kann ich ja um eigene Methoden erweitern und habe nicht gleich alle Methoden in der Haupt-Gui-Klasse.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
thor_norsk Allgemeine Fragen AWT, Swing, JavaFX & SWT 6
thor_norsk Allgemeine Fragen AWT, Swing, JavaFX & SWT 4
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
D Fragen zur GUI AWT, Swing, JavaFX & SWT 4
M NetBeans JFrame Grundlangen fragen AWT, Swing, JavaFX & SWT 6
T JavaFX Allgemeine Fragen zu JavaFX (uA zu Properties) AWT, Swing, JavaFX & SWT 6
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
K Fragen zu JavaFx Canvas AWT, Swing, JavaFX & SWT 0
N Swing Fragen zu non-modal JDialog AWT, Swing, JavaFX & SWT 1
Q Fragen zur JMenuBar & Co. AWT, Swing, JavaFX & SWT 3
F DefaultTreeCellEditor - Fragen zur Groesse und zum Icon beim Editieren AWT, Swing, JavaFX & SWT 4
Kenan89 JMenu Fragen AWT, Swing, JavaFX & SWT 5
Luk10 (LWJGL) Fragen zu VBOs AWT, Swing, JavaFX & SWT 21
M Swing JTextPane + Scrollbar = Fragen AWT, Swing, JavaFX & SWT 15
S Fragen zu JList AWT, Swing, JavaFX & SWT 3
J Das erste Projekt und ein Haufen von Fragen. Der SudokuReader. AWT, Swing, JavaFX & SWT 4
Luk10 Fragen zum Laden von Fonts AWT, Swing, JavaFX & SWT 4
Luk10 Fragen zum Koordinaten System AWT, Swing, JavaFX & SWT 3
M JTable Grundlegende Fragen AWT, Swing, JavaFX & SWT 4
B Prozentrechner GUI Fragen AWT, Swing, JavaFX & SWT 4
H Fragen zu JPanel und JButton AWT, Swing, JavaFX & SWT 3
Q Swing Zeichenprogramm, grundlegende Fragen AWT, Swing, JavaFX & SWT 8
U Swing Fragen bezüglich Multithreaded GUIs (Grundlagen): AWT, Swing, JavaFX & SWT 3
R LayoutManager GridBagLayout Fragen AWT, Swing, JavaFX & SWT 10
A diverse Layout-Fragen AWT, Swing, JavaFX & SWT 4
M LayoutManager Einige Fragen zum GridBagLayout AWT, Swing, JavaFX & SWT 13
H Swing Zwei Fragen AWT, Swing, JavaFX & SWT 5
S 2D-Grafik Diverse Fragen zu Imagemanipulation in Java AWT, Swing, JavaFX & SWT 11
C Swing Grundsätzliche Fragen zu MVC AWT, Swing, JavaFX & SWT 8
F 3 Fragen zu Applets AWT, Swing, JavaFX & SWT 4
L Klick auf JTable -> EditorPane manipulieren, Fragen zu TableModel AWT, Swing, JavaFX & SWT 9
S Fragen zu GridBagLayout AWT, Swing, JavaFX & SWT 6
B Zeichnen in Swing - Jede Menge Fragen! AWT, Swing, JavaFX & SWT 2
D Fragen zu Swing, paintComponent() und repaint AWT, Swing, JavaFX & SWT 6
D GridBagLayout und JEditorPane (mehrere fragen) AWT, Swing, JavaFX & SWT 2
A Swing einfache fragen zu frame AWT, Swing, JavaFX & SWT 10
P Mehrere Fragen AWT, Swing, JavaFX & SWT 4
A Fragen zu Microber AWT, Swing, JavaFX & SWT 4
C Mehrer Fragen zu großem kompletten Swing Beispiel AWT, Swing, JavaFX & SWT 5
T Fragen zu JList und DnD AWT, Swing, JavaFX & SWT 13
I Einige Fragen zu JList AWT, Swing, JavaFX & SWT 6
I Drei Fragen/Probleme mit einer JTable AWT, Swing, JavaFX & SWT 9
G Fragen zum FileChooser AWT, Swing, JavaFX & SWT 5
M 2 Kleine Fragen zum JOptionFrame AWT, Swing, JavaFX & SWT 5
G performance fragen zu AWT, Swing AWT, Swing, JavaFX & SWT 14
J Fragen zu JTable und JScrollpane AWT, Swing, JavaFX & SWT 2
R Frage zu Listfeld oder jTable, auch andere Fragen AWT, Swing, JavaFX & SWT 5
C Fragen zur Darstellung einer JTable mittels Renderer AWT, Swing, JavaFX & SWT 2
ModellbahnerTT Fragen zu AWT AWT, Swing, JavaFX & SWT 3
S Fragen Databinding? AWT, Swing, JavaFX & SWT 3
J Fragen zu AWT Komponenten AWT, Swing, JavaFX & SWT 5
U 2 Fragen zu BufferedImages AWT, Swing, JavaFX & SWT 19
J Fragen zum SyntaxHighlighting (DefaultStyledDocument) AWT, Swing, JavaFX & SWT 2
I Ein paar SWT Fragen AWT, Swing, JavaFX & SWT 10
P Zwei Fragen zu Bildern in Applets AWT, Swing, JavaFX & SWT 2
isowiz Einige Fragen zur ersten eigenen Sing-Applikation AWT, Swing, JavaFX & SWT 4
G 2 Fragen JDesktopPane AWT, Swing, JavaFX & SWT 4
S Fragen zu einem Beispiel(Swings und AWT) AWT, Swing, JavaFX & SWT 33
G Fragen zum Ocean Look and Feel AWT, Swing, JavaFX & SWT 3
G Neue Komponente erstellen - Fragen/Probleme mit MouseEvents AWT, Swing, JavaFX & SWT 2
Y 2 Fragen- JList Inhalt ändern und Fenster invisible setzen AWT, Swing, JavaFX & SWT 5
C Gemischte Fragen AWT, Swing, JavaFX & SWT 10
G Fragen zu JList AWT, Swing, JavaFX & SWT 12
K 2 fragen:JCheckBoxMenuItem und ComboBox AWT, Swing, JavaFX & SWT 2
T Mehrere Fragen zu JToolBar AWT, Swing, JavaFX & SWT 2
N 2 Fragen (zu binärem Suchen und Scrollbar) AWT, Swing, JavaFX & SWT 6
B Einige Fragen zum GUI AWT, Swing, JavaFX & SWT 3
W JavaFX CSS und Vererbung - ich brauche nochmal etwas Nachhilfe AWT, Swing, JavaFX & SWT 28
R JavaFX Java FXML Vererbung in Klassen AWT, Swing, JavaFX & SWT 9
O Ähnliche GUI Elemente - vererbung?! AWT, Swing, JavaFX & SWT 0
J Applet Applet Vererbung/Überladen AWT, Swing, JavaFX & SWT 5
S Button und Vererbung von diesem AWT, Swing, JavaFX & SWT 14
M Swing Vererbung, Probleme mit JDialog AWT, Swing, JavaFX & SWT 12
D Vererbung von Panels AWT, Swing, JavaFX & SWT 8
G vererbung mit swing? AWT, Swing, JavaFX & SWT 5
vogella Instanzisierung via Vererbung? AWT, Swing, JavaFX & SWT 2
T ProgressBox - Update AWT, Swing, JavaFX & SWT 9
Ernesto95 JavaFX JavaFX GUI mit sehr vielen Update requests AWT, Swing, JavaFX & SWT 4
G update, paintComponent AWT, Swing, JavaFX & SWT 1
T GUI Update /EDT AWT, Swing, JavaFX & SWT 7
izoards JavaFX Concurrency Update UI AWT, Swing, JavaFX & SWT 35
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
J TableView Update/Refresh CPU AWT, Swing, JavaFX & SWT 2
A Verständnisfragen im Umgang mit update() und JFrames AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JComboBox update der Daten AWT, Swing, JavaFX & SWT 8
blazingblade JavaFX Tableview Clock Column update AWT, Swing, JavaFX & SWT 5
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
M JavaFX ComboBox: Update zur Laufzeit AWT, Swing, JavaFX & SWT 16
W Swing ProgressBar update AWT, Swing, JavaFX & SWT 4
B IconImage update im Tabbedpane AWT, Swing, JavaFX & SWT 3
M Update überschreiben klappt nicht AWT, Swing, JavaFX & SWT 4
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
M "Update" der JTable funktioniert nicht AWT, Swing, JavaFX & SWT 2
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
V Swing Update Textarea AWT, Swing, JavaFX & SWT 2
T Event Handling JFreeChart Update AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben