Txt statt in TextArea in JTable einlesen und bearbeiten können

Status
Nicht offen für weitere Antworten.

kaoru

Mitglied
Hallo

folgende Situation: ich habe ein Programm, das Textdateien erstellen kann und diese aber auch noch bearbeiten können soll. Erstelle das ganze in Netbeans. Textdateien erstellen habe ich geschafft, auch auslesen in eine TextArea funktioniert, jedoch möchte ich es lieber in eine jTable einlesen.

Eine Textdatei sieht wie folgt aus:

Code1
Code2
Frage
Antwort
Bemerkung
iNCiCode1
Code2
Frage
Antwort
Bemerkung...

Das Trennzeichen ist also \r\n für neue Spalte und iNCi für neue Zeile.
Hab schon einige Anleitungen gefunden wie man etwas in eine jTable einliest, jedoch stehen dort immer alle Daten die in einer Zeile stehen sollen in einer Zeile und sind innerhalb per Trennzeichen getrennt.
Auch verstehe ich nicht ganz, wie ich das anstellen soll mit der Tabelle bei Netbeans. Ich lege eine neue an und diese soll je nach Eingabe, welche Textdatei ausgelesen werden soll, befüllt werden.

Meine Methode für das Einlesen in eine TextArea sieht bis jetzt so aus:
Code:
public void FileRead(){
     try{

    String boxname=new String(jTextField2.getText());

    FileInputStream fstream = new FileInputStream(boxname+".txt");

    // Get the object of DataInputStream
    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String strLine = null;
    String newStrLine = null;
   
    //Read File Line By Line
   while ((strLine = br.readLine()) !=null)   {

        if (strLine.contains("iNCi")) {
            newStrLine=strLine.replace("iNCi", "");
        }
        else {
            newStrLine=strLine;
        }
        
        String inhalt = jTextArea4.getText();
        jTextArea4.setText(inhalt+newStrLine+"\r\n");

    }
    //Close the input stream
    in.close();

    }catch (Exception e){//Catch exception if any
      System.err.println("Error: " + e.getMessage());
    }
}

Sie wird bei einem Buttonklick aufgerufen.

Ich würde mich wahnsinnig freuen, wenn jemand Tipps für mich hätte, wie ich das so umschreiben kann, dass es in die jTable schreibt!

Wenn in dieser Tabelle etwas bearbeitet oder gelöscht wird, soll die Textdatei entsprechend aktualisiert werden. Wie das funktioniert, versteh ich auch nicht wirklich...

Lg

kaoru
 

André Uhres

Top Contributor
So ungefähr könnte es gehen:
Java:
tableModel = new DefaultTableModel(0, 5);
table = new JTable(tableModel);
add(new JScrollPane(table));
BufferedReader reader = new BufferedReader(new FileReader(filename));
String in = reader.readLine();
while (in != null) {
    String[] rowData = new String[]{"", "", "", "", ""};
    for (int i = 0; in != null && i < rowData.length; i++) {
        rowData[i] = in;
        in = reader.readLine();
    }
    tableModel.addRow(rowData);
    if (in != null) {
        in = in.substring(4);//skip line seperator iNCi
    }
}
reader.close();
Die save() Methode speichert die Daten in die Textdatei. Wir können sie z.B. beim Klick auf einen "Save" Button aufrufen:
Java:
public void save() throws IOException {
    BufferedWriter writer = new BufferedWriter(new FileWriter(filename));
    for (int row = 0; row < tableModel.getRowCount(); row++) {
        for (int column = 0; column < tableModel.getColumnCount(); column++) {
            writer.write(tableModel.getValueAt(row, column).toString() + "\r\n");
        }
        if (row < tableModel.getRowCount() - 1) {
            writer.write("iNCi");
        }
    }
    writer.close();

}
 

kaoru

Mitglied
Hallo

erstmal vielen Dank, du hast mir mal wieder sehr geholfen =)

Nun kämpfe ich nur noch mit einem Problem.
Vorweg: Die Bemerkung in der Beispiel TextDatei ist optional. Dementsprechend habe ich den Code angepasst. Ich hatte erst das Problem, dass sich die Inhalte in der Tabelle verschoben haben, das passiert nun nicht mehr.
Aber dafür entsteht immer eine leere Zeile am Ende der Tabelle, wenn eine Bemerkung am Ende der Textdatei eingetragen wurde. Ich finde den Fehler nicht :/ Ich habe auch schon versucht, leere Zeilen aus der Tabelle zu löschen, aber irgendwas mach ich da wohl falsch...
Hier der Code zum Auslesen in die Tabelle:

Java:
public void FileTableRead(){
        BufferedReader reader = null;
        try {
            String boxname = jTextField2.getText();
            reader = new BufferedReader(new FileReader(boxname + ".txt"));

            String in = reader.readLine();
            String bufferIn="";                         

            while (in != null) {
                String[] rowData = new String[]{"", "", "", "", ""};
                                                    
                for (int i=0; in != null && i < rowData.length; i++) {

                if(!bufferIn.equals("")){
                    rowData[0]=bufferIn;
                    bufferIn="";
                }


                else{
                    if(in.contains("iNCi")){
                        bufferIn=in.replace("iNCi", "");
                        rowData[i]="";
                        i=rowData.length;
                    }
                    else
                        rowData[i] = in;

                    
                    in = reader.readLine();
                    }
                }

              tableModel.addRow(rowData);
              if (in != null && in.contains("iNCi")) {
                    in = in.substring(4); //skip line seperator iNCi
              }

              
            }
           

        } catch (IOException ex) {
            Logger.getLogger(MBox_CardCreatorView.class.getName()).log(Level.SEVERE, null, ex);
            getErrorPopupNoBox();
        } 
         finally {
            try {
                reader.close();
            } catch (IOException ex) {
                Logger.getLogger(MBox_CardCreatorView.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
}

Löschen habe ich versucht mit

Java:
int lastRow=tableModel.getRowCount()-1;
if (tableModel.getValueAt(lastRow, 0)==null)
        tableModel.removeRow(lastRow);

an verschiedenen Stellen des FileTableRead-Codes, aber ohne Ergebnis.
Da die ersten zwei Spalten der Tabelle nie leer sein dürfen und der Benutzer sie nicht bearbeiten/löschen können wird (falls ich das noch hinbekomme...), muss nur die erste oder zweite geprüft werden.

Falls ich beim Speichern alle leeren Zeilen löschen will (falls der Benutzer Inhalte gelöscht hat), muss ich das dann in eine Schleife packen, die alle Zeilen durchläuft?


Weiß jemand Rat zu diesem ganzen Zeug? :/

Viele Grüße

kaoru
 

André Uhres

Top Contributor
Bei mir kommt keine leere Zeile. Ansonsten brauchst du ja nur diese zu überspringen:
Java:
if(rowData[0] != null && !rowData[0].trim().equals("")){
    tableModel.addRow(rowData);
}
Löschen in einer Schleife muss immer von der letzten zur ersten Zeile geschehen, sonst ändern ja ständig die Nummern der nachfolgenden Zeilen. Dabei den Inhalt der Zellen nicht nur auf null prüfen, sondern auch auf "" (leeren String).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
H SimpleDataFormat.format() spuckt falsches Jahr aus (statt 1999 = 3899) Java Basics - Anfänger-Themen 7
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
S Methode von vererbter Klasse, statt die der "Mutterklasse" aufrufen Java Basics - Anfänger-Themen 28
A Eclipse-Fenster starten statt Konsoleausgabe Java Basics - Anfänger-Themen 2
M Threads Threads laufen sequenziell, statt gleichzeitig. Java Basics - Anfänger-Themen 9
T Datentypen char als Buchstaben statt als Zahl ausgeben Java Basics - Anfänger-Themen 4
P Datentypen Kann ich bei double Komma statt Punkt eingeben? Java Basics - Anfänger-Themen 14
L Dialogbox statt Konsole verwenden Java Basics - Anfänger-Themen 5
R ArrayList - System.out.println nur einmal, statt 10 mal Java Basics - Anfänger-Themen 5
Z Lottoprogramm - Zeigt manchmal nur 5 Zahlen statt 6 an? Java Basics - Anfänger-Themen 4
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
D Methode die statt char[] ein "null" zurück gibt Java Basics - Anfänger-Themen 8
B GridBagLayout in der oberen rechten Ecke starten statt mittig Java Basics - Anfänger-Themen 2
M toString gibt "null" statt "0.0" aus Java Basics - Anfänger-Themen 5
S Threads Programm terminiert statt zu warten Java Basics - Anfänger-Themen 20
J Objectreferenz statt value an Methode uebergeben? Java Basics - Anfänger-Themen 2
H inputfeld dezimalzahl mit komme statt punkt Java Basics - Anfänger-Themen 12
R Double: auf einmal Komma statt Punkt Java Basics - Anfänger-Themen 4
H TreeMap<> statt TreeMap<Long, String> Java Basics - Anfänger-Themen 2
J Polymorphie Iteratoren statt Collections Java Basics - Anfänger-Themen 13
C lokale Variable verwenden statt globale Java Basics - Anfänger-Themen 7
R POI HSSF liesst in Excel Formel statt Ergebnis Java Basics - Anfänger-Themen 4
K Compiler-Fehler Probleme mit UTF-8 (statt ANSI) und Notepad++ Java Basics - Anfänger-Themen 2
C Objektreferenz holen statt übergeben Java Basics - Anfänger-Themen 2
T Ausgabe findet nicht statt Java Basics - Anfänger-Themen 4
R Objektname statt Adresse ausgeben Java Basics - Anfänger-Themen 4
S Datentypen float statt void Java Basics - Anfänger-Themen 3
S Decimalpunkt statt Dezimalkomma Java Basics - Anfänger-Themen 2
T Array statt String Java Basics - Anfänger-Themen 12
Guybrush Threepwood array.length statt array.length() Java Basics - Anfänger-Themen 6
G Bild in Buffer statt temporäre Bilddatei Java Basics - Anfänger-Themen 6
A log4j - wie kann ich im Quellcode initialisieren statt in der properties-Datei? Java Basics - Anfänger-Themen 2
Landei Annotations statt Listeners? Java Basics - Anfänger-Themen 36
J statt modulo "if-Anweisung" Java Basics - Anfänger-Themen 9
N paint methode statt Event-Handling-Methode Java Basics - Anfänger-Themen 3
D JSP include wie bei php? (inhalt statt ergebnis einfügen)) Java Basics - Anfänger-Themen 24
L Ausgabe in arabischen Zahlen statt in ASCII Java Basics - Anfänger-Themen 9
G Griechische statt lateinischen Buchstaben beim Schreiben Java Basics - Anfänger-Themen 9
M Beispiel-Webprojekt: Statt HSQLDB Postgres verwenden Java Basics - Anfänger-Themen 12
S kompletten Datensatz statt nur ein Feld auslesen lassen,wie? Java Basics - Anfänger-Themen 3
M was wenn der benutzer ein double statt int eingibt ? Java Basics - Anfänger-Themen 3
N Vergleich findet nicht statt. Java Basics - Anfänger-Themen 13
G JDialog auf Jpanel statt Frame? Java Basics - Anfänger-Themen 4
T Wie Eingabe von Gleitkommazahl mit Komma statt Punkt Java Basics - Anfänger-Themen 4
F Sanduhr statt Mauszeiger anzeigen Java Basics - Anfänger-Themen 3
A .statt,anzeigen beim NumberFormat + Wie JTable formatieren? Java Basics - Anfänger-Themen 4
G Toolbar buttons sollen dialoge anzeigne statt pop up Java Basics - Anfänger-Themen 44
R Nur Double statt Sting oder Integer Combo sortieren und ! Java Basics - Anfänger-Themen 16
D ausgabe verändern (statt zeilenumbruch leerzeichen) Java Basics - Anfänger-Themen 2
M statt drop down menü - buttons Java Basics - Anfänger-Themen 5
O JToolBar wird Tab in JTabbedPane statt Toolbar in JFrame Java Basics - Anfänger-Themen 6
W Punkt statt Komma? Java Basics - Anfänger-Themen 2
M Zeichen aneinander Reihen, statt diese zu ersetzen! Java Basics - Anfänger-Themen 3
Dilandau html applet: .jar laden statt .class Java Basics - Anfänger-Themen 4
V Betätigung des Buttons Erhöhung der Variablen um 2 statt 1 Java Basics - Anfänger-Themen 5
JavaBeginner22 TextArea, ohne Zeilenumbruch? Java Basics - Anfänger-Themen 4
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
J Java TextArea Text bei hinzufügen makieren Java Basics - Anfänger-Themen 1
J Buchstaben aus textArea extrahieren Java Basics - Anfänger-Themen 4
O ScrollPane, TextArea Java Basics - Anfänger-Themen 1
J Ärger mit TextArea und Linesep. Java Basics - Anfänger-Themen 3
T Java FX TextArea Java Basics - Anfänger-Themen 3
M TextArea scrollbar bei editable false Java Basics - Anfänger-Themen 5
D JScrollPane mit TextArea Java Basics - Anfänger-Themen 5
M Textarea auslesen und beschreiben Java Basics - Anfänger-Themen 8
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
T Klassen JTextArea und TextArea Java Basics - Anfänger-Themen 8
S Erste Schritte Sprachermittler - Datei öffnen, Text in TextArea, Bereinigen, Auswerten Java Basics - Anfänger-Themen 14
P JavaFX TextArea.setText Java Basics - Anfänger-Themen 13
K Symmetrische Verschlüsselung von TextArea Java Basics - Anfänger-Themen 7
fLooojava Output in einer Textarea einfärben Java Basics - Anfänger-Themen 7
S import java.*; vs import java.awt.TextArea Java Basics - Anfänger-Themen 7
S TextArea, RandomAccessFile, Apend und andere Tricks... Java Basics - Anfänger-Themen 7
F TextArea auslesen und in Datei speichern Java Basics - Anfänger-Themen 4
G textarea action Java Basics - Anfänger-Themen 5
F Erste Schritte String von anderer Klasse auf TextArea von erster Klasse Java Basics - Anfänger-Themen 12
A Timer: textarea.getText() mit Variable vergleichen Java Basics - Anfänger-Themen 3
M TextArea hält Zeilengrenze nicht ein Java Basics - Anfänger-Themen 4
M Textarea auslesen Java Basics - Anfänger-Themen 6
H Input/Output Inhalt einer TextArea in Hex umwandeln Java Basics - Anfänger-Themen 10
P Textarea auslesen Java Basics - Anfänger-Themen 18
R Array in Textarea ausgeben Java Basics - Anfänger-Themen 3
Binary.Coder Bruch in Textarea Java Basics - Anfänger-Themen 5
0 String farbig in TextArea Java Basics - Anfänger-Themen 10
A TextArea und ScrollBar Java Basics - Anfänger-Themen 17
B ArrayList zu TextArea Java Basics - Anfänger-Themen 5
N leere JTextArea wird nicht angezeigt - TextArea aber schon? Java Basics - Anfänger-Themen 5
G Text aus TextArea in Zwischenablage kopieren Java Basics - Anfänger-Themen 6
S Texteingabe in Textarea sperren? Java Basics - Anfänger-Themen 3
M Scrollbar zu Textarea Java Basics - Anfänger-Themen 5
Luk10 TextArea und Konsole ... Java Basics - Anfänger-Themen 3
C ArrayList In textarea ausgeben Java Basics - Anfänger-Themen 3
D TextArea clearen mit setText("") ? Java Basics - Anfänger-Themen 21
K In TextArea ausgeben ? Java Basics - Anfänger-Themen 4
M im Programm TextArea hinzufügen Java Basics - Anfänger-Themen 2
S String repräsentation eines XML-Files für Textarea formatieren. Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben