Halöchen,
ich hatte die (verrückte?) Idee meinen LaTex-Editor (s. http://www.java-forum.org/de/viewtopic.php?t=12717&start=15) in einer neuen Version zusätzlcih mit der Option Tabs auszustatten, wie man das aus guten Browsern und HTML-Editoren kennt. Der User soll also beim Start entscheiden wie er arbeiten möchte, daher muss ich sowohl die alte Version lauffähig halten, als auch die neuen Optionen anbieten können. Das hab ich soweit ganz gut über die Konstruktoren gelöst. Also kein Problem.
Für die Tabs verwende ich eine JTabbedPane. Für die Edit-Komponente habe ich Klasse JTextArea erweitert und mit Funktionen wie speichern usw versehen, damit jedes Element einzeln verarbeitet werden kann (= Klasse SaveableEdit (SE)). Die einzelnen SE's hängen dann in der TabbedPane in der Hauptklasse. Maximal erlaube ich 10 Tabs.
Um zu wissen, welches Tab gerade aktiv ist, frag ich den Tab-Index ab und ermittle daraus die aktive SE. Gleichzeitig hab ich in einem Array (Größe 10) boolean-werte gespeichert, die anzeigen ob das jeweilige Tab schon gespeichert ist oder nicht. Und ein String-Array in dem ich die passenden Filenamen ablege, damit ich beim speichern nicht immer wieder die Datei angeben muss, wenn ich schon gespeichert hab. Wenn cih also im Editor dann auf speichern klicke, wird das aktive Tab ermittelt, daraus die aktive SE und mit dem Index der String aus dem Array gelesen und die Datei gespeichert.
Soweit so gut. Dann fiel mir nur dummerweise ein, dass man ja auch die Tabs einzeln schließen können müsste. Trotzdem muss ja die Anzahl von 10 möglichen Tabs bleiben. Also kann ich die dann acuh wieder öffnen. Das geht über nen Zähler ganz gut. Nur durch ständiges Schließen und Öffnen kann ich den Index der TabbedPane praktisch vergessen. Alle Zuordnungen gehen in die Hose. (von einem UndoListener, der an einem Document hängt mla ganz zu schweigen). Mein erster Ansatz war das über zwei Hashtables zu lösen, wobei eine die Zuordnung von SE zum Array-Index der Dateien speichert und eine andere die wechselnde Zuordnung von Tab-Index zu SE. Ich wollte also zunächst die jeweils gültige SE ermitteln und dann mit der zweiten Hashtable das gültige File. Leider funktioniert zwar nominell die Zuordnung der ersten Hashtabel (hab ich mir ausgeben lassen) aber wenn ich versuche den Value der ersten als Key der Zweiten anzugeben, gehts komplett schief. Und das ist auch unheimclih komplex und fehleranfällig.
Hat jemand eine idee, wie man das ganze erheblich vereinfachen könnte, oder zumindest wie ich an die SE komme, ohne über den Index der TabbedPane zu gehen?
Danke,
Gorgophol
ich hatte die (verrückte?) Idee meinen LaTex-Editor (s. http://www.java-forum.org/de/viewtopic.php?t=12717&start=15) in einer neuen Version zusätzlcih mit der Option Tabs auszustatten, wie man das aus guten Browsern und HTML-Editoren kennt. Der User soll also beim Start entscheiden wie er arbeiten möchte, daher muss ich sowohl die alte Version lauffähig halten, als auch die neuen Optionen anbieten können. Das hab ich soweit ganz gut über die Konstruktoren gelöst. Also kein Problem.
Für die Tabs verwende ich eine JTabbedPane. Für die Edit-Komponente habe ich Klasse JTextArea erweitert und mit Funktionen wie speichern usw versehen, damit jedes Element einzeln verarbeitet werden kann (= Klasse SaveableEdit (SE)). Die einzelnen SE's hängen dann in der TabbedPane in der Hauptklasse. Maximal erlaube ich 10 Tabs.
Um zu wissen, welches Tab gerade aktiv ist, frag ich den Tab-Index ab und ermittle daraus die aktive SE. Gleichzeitig hab ich in einem Array (Größe 10) boolean-werte gespeichert, die anzeigen ob das jeweilige Tab schon gespeichert ist oder nicht. Und ein String-Array in dem ich die passenden Filenamen ablege, damit ich beim speichern nicht immer wieder die Datei angeben muss, wenn ich schon gespeichert hab. Wenn cih also im Editor dann auf speichern klicke, wird das aktive Tab ermittelt, daraus die aktive SE und mit dem Index der String aus dem Array gelesen und die Datei gespeichert.
Soweit so gut. Dann fiel mir nur dummerweise ein, dass man ja auch die Tabs einzeln schließen können müsste. Trotzdem muss ja die Anzahl von 10 möglichen Tabs bleiben. Also kann ich die dann acuh wieder öffnen. Das geht über nen Zähler ganz gut. Nur durch ständiges Schließen und Öffnen kann ich den Index der TabbedPane praktisch vergessen. Alle Zuordnungen gehen in die Hose. (von einem UndoListener, der an einem Document hängt mla ganz zu schweigen). Mein erster Ansatz war das über zwei Hashtables zu lösen, wobei eine die Zuordnung von SE zum Array-Index der Dateien speichert und eine andere die wechselnde Zuordnung von Tab-Index zu SE. Ich wollte also zunächst die jeweils gültige SE ermitteln und dann mit der zweiten Hashtable das gültige File. Leider funktioniert zwar nominell die Zuordnung der ersten Hashtabel (hab ich mir ausgeben lassen) aber wenn ich versuche den Value der ersten als Key der Zweiten anzugeben, gehts komplett schief. Und das ist auch unheimclih komplex und fehleranfällig.
Hat jemand eine idee, wie man das ganze erheblich vereinfachen könnte, oder zumindest wie ich an die SE komme, ohne über den Index der TabbedPane zu gehen?
Danke,
Gorgophol