CSV-Datei-Filterkomponente - Umstellung des Formates

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.

BBCode ist eingeschaltet
[img] ist eingeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Ansicht erweitern Die letzten Beiträge des Themas: CSV-Datei-Filterkomponente - Umstellung des Formates

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von ds10 » 26 Jul 2015, 14:13

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.

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von Sheldon2012 » 26 Jul 2015, 12:22

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?

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von ds10 » 13 Jul 2015, 18:26

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.

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von Sheldon2012 » 13 Jul 2015, 18:20

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.

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von ds10 » 13 Jul 2015, 17:56

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.)

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von Sheldon2012 » 13 Jul 2015, 17:41

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.

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von ds10 » 13 Jul 2015, 17:23

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.

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von Sheldon2012 » 13 Jul 2015, 16:44

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?

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von Sheldon2012 » 05 Jun 2015, 15:28

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.

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von ds10 » 04 Jun 2015, 21:18

Ja, wenn du ein eigenes Model programmieren möchtest, dann kommt das in eine eigene Klasse.

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von Sheldon2012 » 04 Jun 2015, 21:06

Sorry! Ich meinte natürlich das Panel.
Aber dann habe ich das wohl richtig verstanden. Die JTable muß ins Panel und im Panel verwende ich dann ein Model.
Das Model erstellt man dann in einer eigenen Klasse, die zusätzlich ins Package csvFileFilterComponent eingefügt wird. Richtig?

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von ds10 » 04 Jun 2015, 20:58

Doch dafür gibt es Methoden, addRow für anfügen einer Zeile, removeRow zum Löschen und setValueAt für das Ändern der Werte. Natürlich kannst du auch ein eigenes Model programmieren, was dann einfacher Änderungen zulässt, das kann unter Umständen einfacher sein, als das Default-Model zu benutzen, was ja so gemacht ist, dass es für möglichst viele Datentypen funktioniert.

Ich weiß nicht, wo du im Plugin einen Frame hast. Eine Filterkomponente hat in der Regel ein Panel für die Einstellungen.
Wenn du den Editor unabhängig von der Filterkomponente anbieten möchtest, dann wäre eine neue Button-Action günstig, die dann einen JDialog mit dem Editor öffnet, in dem man dann die gewünschte CSV-Datei zum Editieren öffnen kann. Die Tabelle muss aber auf jeden Fall in ein JScrollPane eingefügt werden, sonst könnte man nur die obersten Zeilen editieren.

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von Sheldon2012 » 04 Jun 2015, 19:21

Das DefaultTableModel scheint keine Methoden für Update, Edit, Delete und Save zu kennen. Das wäre dann etwas wenig.
Oder habe ich da was übersehen?

Kann ich die JTable einfach so in unseren Frame einbauen?

Generell finde ich die Idee eines Editors nicht schlecht. Der könnte z. B. auch eine Konvertierung des Formates vornehmen.

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von Sheldon2012 » 03 Jun 2015, 20:25

Danke! Das werde ich mir mal anschauen.

Re: CSV-Datei-Filterkomponente - Umstellung des Formates

von ds10 » 03 Jun 2015, 20:05

http://sourceforge.net/p/tvbrowser/code ... Panel.java
http://sourceforge.net/p/tvbrowser/code ... Model.java
Am Besten geeignet ist wie im Beispiel eine JTable und da nur Textdaten eingegeben werden, braucht man auch keinen speziellen Renderer und CellEditor, außerdem sollte ein DefaultTableModel reichen, so dass du kein spezielles programmieren musst.

Nach oben