CSV-Datei-Filterkomponente - Umstellung des Formates

Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

Beitrag von Sheldon2012 »

Man sollte seine Übelegungen ja stets kritisch hinterfragen. Mit etwas Abstand betrachtet, muß man sich natürlich hinsichtlich des Editors schon die Sinnfrage stellen, da es in der Welt in Softwarepaketen wie Microsoft Office, Open Office, Libre Office usw. bereits durchaus leistungsfähige Applikationen für die Bearbetung von CSV-Dateien gibt. Solange man also über die reine Bearbeitung von CSV-Dateien spricht, würde man mit der Implementierung eines solchen Editors quasi das Rad neu erfinden. Das kann natürlich auch seinen Charme haben. Der Nutzen wäre aber zumindest fraglich.
Damit wird natürlich auch das "Semikolon zählen"- Argument erschlagen. :)

Wenn man aber an zusätzlichen Funktionalitäten, wie z. B. einer spezifischen Plausibilitätsprüfung, interessiert ist, sieht das schon wieder anders aus. Hier könnte ein eigenes Frontend (Editor) eventuell Sinn machen. Derzeit haben wir aber noch nicht eine Komplexitätsebene erreicht, die solche Maßnahmen erfordern würden. Das zeigt auch die Tatasache, das seit Einführung der Schnittstelle keine einzige Frage bezüglich der Hinterlegung aufgekommen ist. Diesbezüglich ist sicherlich auch die ausführliche Wiki-Seite ein erfolgreiches Strategieelement.

Daher sehe ich in dem Editor eher eine langfristige Option.
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

Beitrag von Sheldon2012 »

Also ich habe jetzt mal ein wenig mit JTable gespielt, nachdem ich mir ein Tutorial dazu angeschaut habe.
Wenn ich das richtig verstehe wird das in public JPanel getSettingsPanel() so eingebaut, wobei mModel und mTable Klassenfelder sind. Das DefaultModel wird dann später durch ein eigenes ersetzt.

Code: Alles auswählen


  	  String[] header = new String[]{ "Sendungstitel", "Episodentitel", "Staffel-Nr", "Episoden-Nr", "Sprache", "Produktionsjahr", "Infor" };
  	  mModel = new DefaultTableModel( header, 0 );
	  mTable = new JTable(mModel);
      
      JPanel center = new JPanel(new BorderLayout());
      center.add(mPath, BorderLayout.NORTH);
      JPanel table = new JPanel(new BorderLayout());
      table.add(new JScrollPane(mTable), BorderLayout.SOUTH);
      
      settings.add(center, BorderLayout.NORTH);
      settings.add(table, BorderLayout.SOUTH);
      global.add(settings, BorderLayout.WEST);

Da mModel und mTable Klassenfelder sind, habe ich einfach mal zum Test in processLine(String line) folgendes eingebaut.

Code: Alles auswählen


   private void processLine(String line) {
      if((line != null) && (line.contains(SEPARATOR))) {
         if(mCSVData == null) {
            mCSVData = new HashMap<String, HashSet<String>>();
         }
         
         line += SPACE_STRING;  
         
         String[] parts = line.split(SEPARATOR);    
         
         Vector row = new Vector(CSV_DATA_LENGTH_EXTENDED);

         row.add(parts[0]);
 
         for(int i = 1; i < CSV_DATA_LENGTH_EXTENDED; i++) {	
        	   row.add("hallo"); 
         } 
         
         if (mModel != null) {
            mModel.addRow(row);
            mTable.updateUI();
         } 

)

Nun sollte ich doch in der Tabelle in meinem JPanel die Daten sehen. Das ist aber leider nicht so.
Dann habe ich es mal mit einem readFile() in public JPanel getSettingsPanel() versucht. Das hilft auch nicht.
Bitte verrate mir,was ich faksch mache?
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

Beitrag von ds10 »

Ich würde ja spontan vermuten, dass mModel einfach leer ist, denn du erstellst das Model ja erst in getSettingsPanel(), die Methode wird aber nur aufgerufen, wenn die Einstellungen der Filterkomponente geöffnet werden und dabei überschreibst du dann ein evtl. schon vorhandenes Model mit einem leeren Model, denn die Datensätze fügst du ja erst bei processLine ein. Das wird doch aber wahrscheinlich erst beim Klick auf OK aufgerufen, also erst dann wenn es zu spät ist.

Du musst das Model in getSettingsPanel() füllen und/oder darauf achten, dass du ein vorhandenes Model nicht einfach mit einem leeren überschreibst. Alternativ kannst du das Model auch einfach beim Einlesen der Datei erstellen und dann in getSettingsPanel() einer lokalen JTable hinzufügen.

EDIT: Aus speichertechnischen Gründen ist es allerdings besser das Model und die JTable nur zum Zeitpunkt der offenen Einstellungen zu füllen und nach Speichern des Filters wieder zu leeren, sonst hast du alle Daten zusätzlich nämlich die ganze Zeit auch noch im Model im Speicher liegen.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

Beitrag von Sheldon2012 »

Deshalb habe ich das auch in das settingsPanel gesetzt. Das Problem war zum einen die Reihenfolge der Aufrufe und mein neuer Datums-Check. der ist mir hier zum Verhängnis geworden.
Man sollte halt erst mal das Model füllen bevor man damit eine Table baut.
Jetzt sehe ich die Daten.

Was etwas unschön ist, ist der JScrollPane, den man laut Tutorial umbedingt für den Header braucht.
Kann ich den loswerden. Das sieht furchtbar aus.
Ich hätte halt gerne einen Scroller, der zwar in der Tabelle aber nicht im settingsPanel greift.
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

Beitrag von ds10 »

Du setzt das Scrollpane doch für die Tabelle, genau so ist es auch vorgesehen, denn du willst ja, dass die Tabelle gescrollt werden kann, wenn sie nicht in das Panel passt. Deine Panels sehen allerdings etwas wild aus, benutze am Besten das FormLayout, dann brauchst du nur ein einzelnes Panel, für das du dann die passenden Spalten und Zeilen setzen kannst. Alternativ kannst du auch das GridBagLayout benutzen, nur das ist aus meiner Sicht schwieriger umzusetzen als das FormLayout. Beim FormLayout sollte dann das Scrollpane mit der Tabelle in einer Zeile sein die mit "fill:100dlu:grow" kodiert ist. In TV-Browser wird für fast alles das FormLayout benutzt. (Es gibt dafür auch einen EnhancedPanelBuilder, der die Verwendung von FormLayout noch leichter macht.)
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

Beitrag von Sheldon2012 »

Danke für den hinweis mit den Layouts. Da werde ich aml ein wenig spielen.
Das Problem scheint zu sein, das das Fenster zu klein ist. Dann setzt er natürlich automatisch den Sscroller für das Fenster.
Aber daran werde ich wohl nichts ändern könne, oder? Das wird doch bestimmt von außen global für alle Filterkomponenten gesetzt.
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

Beitrag von ds10 »

Die Einstellungen der Filterkomponenten sind so groß, wie sie vom Nutzer aufgezogen werden. Wie das dann intern im Panel dargestellt wird, hängt einzig und allein davon ab, wie das Panel aufgebaut ist. Wenn du dir z.B. die Filterkomponenten für die Sender ansiehst, nimmt die immer den Platz ein, der vorhanden ist.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

Beitrag von Sheldon2012 »

Das FormLayout ist wirklich gut geeignet. Das klappt schon richtig gut. Danke für den Tipp.

Das Leeren des Models ist ein valider Punkt. Das sollte ja pasieren, sobald ich den Einstellungs-Dialog verlasse.
Da gibt es nun 3 Möglichkeiten:

- Mit dem Schalter "OK"
Das kann man ja in der Methode public void saveSettings() regeln

- Mit dem Schalter "Abbrechen"
Wo erwische ich den Event?

- Schließen des Dialog über "x"
Wo erwische ich den Event?
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

Beitrag von ds10 »

Es gibt nur saveSettings, wenn der Dialog geschlossen oder abgebrochen wird, wird die Filterkomponente nicht informiert. Da könntest du höchstens mit einem AncestorListener auf dem Panel feststellen, wann der entfernt wird.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Antworten