tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
15
ZUGRIFFE
5481
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    simoasis simoasis ist offline Mitglied
    Registriert seit
    Apr 2004
    Beiträge
    10
    Ich möchte die unten erzeugten Sachen, welche mittels Tokenizer getrennt werden, in ein Tabelle einlesen. (jTable)
    Wie schaffe ich das der Inhalt des Arrays in eine GUI Tabelle eingepflegt wird und zwar automatisch
    Ich wär besonders dankbar für ein komplettes Skript, dass dieses Problem behebt.
    Hier das Beispiel:

    Source-Code:

    import java.io.*;
    import java.util.*;
    import java.lang.*;

    public class Main {

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {

    // Aufruf der GUI
    GUI t = new GUI();
    t.setSize(800,600);
    t.show();

    // Array für Aktien erzeugen
    Aktie depot[] = new Aktie[50];
    int aktienzaehler = 0;
    try {
    String zeile;

    //Wir lesen aus "Aktien.txt".
    File eingabeDatei = new File("Pfadangabe+txt-File");
    FileReader eingabeStrom = new FileReader(eingabeDatei);
    BufferedReader eingabe = new BufferedReader(eingabeStrom);


    while ((zeile = eingabe.readLine()) != null)
    {
    //einlesen einer Aktie mit allen Werten
    StringTokenizer st = new StringTokenizer(zeile, ";");
    String name = st.nextToken();
    String wknummer = st.nextToken();
    String tageskurs = st.nextToken();
    String anz = st.nextToken();

    //parsen der WKN, des Kurses und der Anzahl, damit
    //das keine Strings mehr sind und man damit rechnen kann
    int wkn = Integer.parseInt(wknummer);
    float kurs = Float.parseFloat(tageskurs);
    int anzahl = Integer.parseInt(anz);

    // Aktienarray füllen
    Aktie neu = new Aktie(name,wkn,kurs,anzahl);
    depot[aktienzaehler]=neu;
    aktienzaehler++;
    }

    //System.out.println(eingabe.readLine());
    } catch (IOException e) {
    e.printStackTrace();

    }
    catch (NoSuchElementException n) {
    n.printStackTrace();
    }
    int i=0;
    while (depot[i]!=null){
    System.out.println(depot[i].Name + "\t\t"+depot[i].kurs + "\t" + depot[i].anzahl);
    i++;
    }
    }
    }

    Gruß
    Simon
     

  2. #2
    Registriert seit
    Apr 2004
    Ort
    Ruhrgebiet
    Beiträge
    1.582
    Original geschrieben von simoasis
    Ich möchte die unten erzeugten Sachen, welche mittels Tokenizer getrennt werden, in ein Tabelle einlesen. (jTable)
    Wie schaffe ich das der Inhalt des Arrays in eine GUI Tabelle eingepflegt wird und zwar automatisch
    Ich wär besonders dankbar für ein komplettes Skript, dass dieses Problem behebt.
    Hier das Beispiel:

    C U T

    Gruß
    Simon
    Ich hasse es, wenn jemand den vollständigen Code postet oder eine Lösung als vollständigen Code haben möchte. Beschreibe lieber genau, wo es klemmt. Das ist für beide Seiten hilfreicher als blanker Code, der falsch ist oder den Du evtl. nicht verstehst.

    Wo genau liegt das Problem? Beim Parsen der Textdatei oder bei der Übertragung in die Tabelle?
     

  3. #3
    simoasis simoasis ist offline Mitglied
    Registriert seit
    Apr 2004
    Beiträge
    10
    ok ok ok
    dann weiß ich's fürs nächste mal.

    das problem besteht jetzt aber darin:
    wie bekomme ich die sachen die ich über ne txt datei einlese in ein jtable eingelesen?
     

  4. #4
    Registriert seit
    Apr 2004
    Ort
    Ruhrgebiet
    Beiträge
    1.582
    Original geschrieben von simoasis
    ok ok ok
    dann weiß ich's fürs nächste mal.

    das problem besteht jetzt aber darin:
    wie bekomme ich die sachen die ich über ne txt datei einlese in ein jtable eingelesen?
    Red ich chinesisch? Wo GENAU liegt das Problem? Das Parsen der Textdatei oder die Übernahme in die Tabelle? Also liegen die Daten schon irgendwo vor und müssen nur noch in die Tabelle "reingequetscht" werden oder klemmt es schon beim Einlesen der Daten aus der Textdatei?
     

  5. #5
    simoasis simoasis ist offline Mitglied
    Registriert seit
    Apr 2004
    Beiträge
    10
    also ich versuch nochmals zu beschreiben, wo das problem liegt:

    ich hab derzeit ne txt-datei erstellt die in etwa so aufgebaut ist:
    123541.;bluppblabla;blabluppbla;0
    bluppblabla.;blablabla;123435;blablabla
    blabla.;760080;blablabla;blablablupp

    es steht halt was drin und die einzelnen sachen sind durch ; getrennt
    dies les ich dann mit nem tokenizer / filereader / bufferreader aus
    (es kommt dann auch über system.out.println raus.
    soweit läuft alles.

    jetzt möchte ich dieses textfile (siehe oben) aber nicht über ein output window ausgeben, sondern es soll in einer GUI in einer tabelle ausgegeben werden, dh ein jtable soll sich mit dem inhalt des textfiles füllen
    im beispiel oben (inhalt der txt-datei) sollte dann ein tabelle mit 3 zeilen und 4 spalten entstehen)
     

  6. #6
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Versuchs mal hiermit:

    Spaltenanzahl muss bei allen Datensatzen gleich sein ...

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
     
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    import javax.swing.table.DefaultTableModel;
     
    /*
     * FileImport.java
     *
     * Created on 14. April 2004, 14:16
     */
     
    /**
     *
     * @author  Darimont
     */
    public class FileImport extends JFrame {
     
        private BufferedReader br;
        private File importFile;
        private JFileChooser chooser;
        private FileImport _this;
        private volatile boolean importRunning = false;
        private DefaultTableModel model;
     
        /** Creates new form FileImport */
        public FileImport() {
            initComponents();
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            _this = this;
        }
     
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        private void initComponents() {
            java.awt.GridBagConstraints gridBagConstraints;
     
            bgPanel = new JPanel();
            tablePanel = new JPanel();
            scrollPane = new JScrollPane();
            jTable1 = new JTable();
            controlsPanel = new JPanel();
            btnChoseFile = new JButton();
            txtPath = new JTextField();
            btnImport = new JButton();
            lblPath = new JLabel();
            lblDelimiter = new JLabel();
            txtDelimiter = new JTextField();
     
            getContentPane().setLayout(new java.awt.FlowLayout());
     
            setTitle("FileImport");
     
            bgPanel.setLayout(new java.awt.GridBagLayout());
     
            
            bgPanel.setMinimumSize(new java.awt.Dimension(400, 300));
            bgPanel.setPreferredSize(new java.awt.Dimension(400, 300));
            
            tablePanel.setMinimumSize(new java.awt.Dimension(400, 200));
            tablePanel.setPreferredSize(new java.awt.Dimension(400, 200));
            scrollPane.setMinimumSize(new java.awt.Dimension(400, 200));
            scrollPane.setPreferredSize(new java.awt.Dimension(400, 200));
     
            jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            scrollPane.setViewportView(jTable1);
     
            tablePanel.add(scrollPane);
     
            bgPanel.add(tablePanel, new java.awt.GridBagConstraints());
     
            controlsPanel.setLayout(new java.awt.GridBagLayout());
     
            controlsPanel.setMinimumSize(new java.awt.Dimension(400, 100));
            controlsPanel.setPreferredSize(new java.awt.Dimension(400, 100));
            btnChoseFile.setText("Chose File");
            btnChoseFile.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    btnChoseFileActionPerformed(evt);
                }
            });
     
            controlsPanel.add(btnChoseFile, new java.awt.GridBagConstraints());
     
            txtPath.setColumns(20);
            gridBagConstraints = new java.awt.GridBagConstraints();
            gridBagConstraints.gridx = 1;
            gridBagConstraints.gridy = 1;
            controlsPanel.add(txtPath, gridBagConstraints);
     
            btnImport.setText("Import");
            btnImport.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    btnImportActionPerformed(evt);
                }
            });
     
            controlsPanel.add(btnImport, new java.awt.GridBagConstraints());
     
            lblPath.setText("Path: ");
            gridBagConstraints = new java.awt.GridBagConstraints();
            gridBagConstraints.gridx = 0;
            gridBagConstraints.gridy = 1;
            controlsPanel.add(lblPath, gridBagConstraints);
     
            lblDelimiter.setText("Delimiter: ");
            gridBagConstraints = new java.awt.GridBagConstraints();
            gridBagConstraints.gridx = 0;
            gridBagConstraints.gridy = 2;
            controlsPanel.add(lblDelimiter, gridBagConstraints);
     
            txtDelimiter.setColumns(3);
            gridBagConstraints = new java.awt.GridBagConstraints();
            gridBagConstraints.gridx = 1;
            gridBagConstraints.gridy = 2;
            controlsPanel.add(txtDelimiter, gridBagConstraints);
     
            gridBagConstraints = new java.awt.GridBagConstraints();
            gridBagConstraints.gridx = 0;
            gridBagConstraints.gridy = 1;
            bgPanel.add(controlsPanel, gridBagConstraints);
     
            getContentPane().add(bgPanel);
     
            pack();
        }
     
        private void btnImportActionPerformed(java.awt.event.ActionEvent evt) {
            // Add your handling code here:
            if (importFile != null)
                if (!importRunning) {
     
                    SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            doImport(importFile);
                        }
                    });
                } else {
                    System.out.println("Still importing ... ");
                }
        }
     
        /**
         * @param importFile
         */
        protected void doImport(File importFile) {
            // TODO Auto-generated method stub
            String delimiter = txtDelimiter.getText();
            if (delimiter == null || !delimiter.equals(""))
                delimiter = ";";
            try {
                br = new BufferedReader(new FileReader(importFile));
     
                ArrayList rows = new ArrayList();
                Object[] clmHeaders = null;
     
                String line = null;
                StringTokenizer tokenizer = null;
     
                int tCnt = -1;
     
                while ((line = br.readLine()) != null) {
                    tokenizer = new StringTokenizer(line, delimiter);
                    tCnt = tokenizer.countTokens();
                    Object[] rowData = new Object[tCnt];
                    int i = 0;
                    while (tokenizer.hasMoreTokens())
                        rowData[i++] = tokenizer.nextToken();
                    rows.add(rowData);
                }
     
                clmHeaders = new Object[((Object[]) rows.get(0)).length];
     
                for (int i = 0; i < clmHeaders.length; i++) {
                    clmHeaders[i] = "Column" + i;
                }
     
                Object[][] oArray = new Object[tCnt][];
                int lstSize = rows.size();
                for (int i = 0; i < lstSize; i++)
                    oArray[i] = (Object[]) rows.get(i);
     
                model = new DefaultTableModel(oArray, clmHeaders);
     
                jTable1.setModel(model);
                jTable1.updateUI();
     
                System.out.println("Import complete!");
     
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
     
        }
     
        private void btnChoseFileActionPerformed(java.awt.event.ActionEvent evt) {
            // Add your handling code here:
            if (chooser == null)
                chooser =
                    new JFileChooser(new File(System.getProperty("user.dir")));
     
            chooser.showDialog(this, "load");
            importFile = chooser.getSelectedFile();
            if (importFile != null)
                txtPath.setText(importFile.getAbsolutePath());
        }
     
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            new FileImport().show();
        }
     
        // Variables declaration - do not modify
        private JButton btnChoseFile;
        private JButton btnImport;
        private JPanel bgPanel;
        private JPanel tablePanel;
        private JPanel controlsPanel;
        private JScrollPane scrollPane;
        private JTable jTable1;
        private JLabel lblDelimiter;
        private JLabel lblPath;
        private JTextField txtDelimiter;
        private JTextField txtPath;
        // End of variables declaration
     
    }

    Gruß Tom
     

  7. #7
    Registriert seit
    Apr 2004
    Ort
    Ruhrgebiet
    Beiträge
    1.582
    OK.
    In groben Zügen für eine saubere Implementierung, die Du in dieser Form immer wieder durchführen kannst:
    1. Erzeuge Dir eine Klasse, die Du vom DefaultTableModel ableitest (z.B. MyTableModel)
    2. Darin legst Du eine Instanzvariable myData[] an
    3. In dieser Klasse implementierst Du die Methoden
    - getColumnCount () und lieferst dort die Anzahl der auszulesenden Spalten zurück, also das, was Dein Aktie-Objekt ausmacht
    - getColumnName() und lieferst hier den Spaltennamen zurück. Das kann als Instanzvariable als Stringarray bereitgehalten werden
    - getRowCount() lieferst Du die Länge des Aktie-Arrays zurück
    - getValueAt() liefert dann aus Deinem Aktie-Array myData das anzuzeigende Objekt (üblicherweise Integer oder String) für die Spalte und die Zeile
    - Implementiere eine Methode, die myData[] setzt, z.B.
    public void setMyData(Aktie aktien[])
    {
    myData = aktien;
    }
    4. Achte darauf, dass die o.a. Methoden in jedem Fall etwas zurückgeben!
    5. Erzeuge eine Instanz Deines TableModels dort, wo die Tabelle verwaltet wird.
    MyTableModel myTableModel = new MyTableModel();
    6. Weise dieses TableModel Deiner JTable zu, z.B. myJTable.setModel(myTableModel);
    7. Lies die Textdatei wie gehabt in Dein Array ein.
    8. Hinterlege das eingelesene Array Deinem TableModel per
    myJTable.getModel().setMyData(aktien);
    9. Sorge dafür, dass sich die Tabelle aktualisiert. Entweder
    myJTable.getModel().fireTableDataChanged(); oder in setMyData(), wo es eigentlich hingehört:
    public void setMyData(Aktie aktien[])
    {
    myData = aktien;
    fireTableDataChanged();
    }

    All das kann ggf. zu Problemen führen wegen des Arrays. Praktischer wäre die Verwendung einer ArrayList.
     

  8. #8
    simoasis simoasis ist offline Mitglied
    Registriert seit
    Apr 2004
    Beiträge
    10
    danke danke
    das mit dem import funktioniert ja wunderbar
    auch die andere anleitung ist mir eine hilfe
    nochmals danke für die mitarbeit
     

  9. #9
    Registriert seit
    Apr 2004
    Ort
    Ruhrgebiet
    Beiträge
    1.582
    Original geschrieben von Thomas Darimont
    Hallo!

    Versuchs mal hiermit:

    Spaltenanzahl muss bei allen Datensatzen gleich sein ...

    Code :
    1
    
    import java.io.BufferedReader;

    Gruß Tom
    Hallo Tom,
    Deine Hilfsbereitschaft in allen Ehren - meinst Du nicht, dass es hilfreicher ist, den Lösungsweg zu erklären, so dass sich der Fragesteller den konkreten Code selbst erarbeiten kann, anstatt unzählige Zeilen unkommentierten Code zu posten?
     

  10. #10
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo Snape!

    Du hast dem Kollegen doch schon en Detail erklärt, was er machen muss. Ich hab nur ein praktisches Beispiel dazu abgeliefert. Ich denke, wenn man was mit Java Programmierung zu tun haben will muss man sich auch ein wenig angehwöhnen den Code lesen zu können. Weiterhin glaube ich das die wirklich wichtigen Methoden (doImport) etc. auch so "entziffert" werden können.

    Gruß Tom
     

  11. #11
    Registriert seit
    Apr 2004
    Ort
    Ruhrgebiet
    Beiträge
    1.582
    Original geschrieben von Thomas Darimont
    >Hallo Snape!
    >Du hast dem Kollegen doch schon en Detail erklärt, was er machen muss. Ich hab nur ein praktisches Beispiel dazu abgeliefert.

    Ja, VOR meiner Ausführung.

    >Ich denke, wenn man was mit Java Programmierung zu tun haben will muss man sich auch ein wenig angehwöhnen den Code lesen zu können.

    Naja, aber vielleicht nicht sofort als Einsteiger, dazu noch so viele Zeilen...

    >Weiterhin glaube ich das die wirklich wichtigen Methoden (doImport) etc. auch so "entziffert" werden können.
    >Gruß Tom

    "Können" - von Dir, von mir,... das heisst nicht, dass ein Einsteiger auch sofort damit klarkommen muss.
    Didaktisch besser sind Erklärungen, WAS WARUM zu tun ist - IMO
     

  12. #12
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo Snap!

    Ok, ich werde versuchen deinen Vorschlag der besseren Quellcode Aufbereitung in den nächsten Beispielen umzusetzen ...

    Ich hab mich zuvor immer an den SWT Snippets auf Eclipse.org orientiert oder an den Code Postings im Forum auf java.sun.com...

    Gruß Tom
     

  13. #13
    simoasis simoasis ist offline Mitglied
    Registriert seit
    Apr 2004
    Beiträge
    10
    ich hab da noch ne frage:
    eigentlich will ich ja direkt die datei, dh mit bekanntem pfad in einem jtable innerhalb des jinternalframes erstellen lassen.
    ist dies machbar? wenn ja wie?

    ich mein der import ist ja sehr gut aber es muss halt nicht ein dialogfeld mit ner eingabemaske erscheinen, sondern einfach nur direkt die tabelle wenn möglich in nem jinternalframe (dh die txt datei ist bekannt und der pfad soll im quellcode stehen)
    weiß jemand wie ich das anstelle?

    würd mich freuen
     

  14. #14
    Registriert seit
    Apr 2004
    Ort
    Ruhrgebiet
    Beiträge
    1.582
    Original geschrieben von simoasis
    ich hab da noch ne frage:
    eigentlich will ich ja direkt die datei, dh mit bekanntem pfad in einem jtable innerhalb des jinternalframes erstellen lassen.
    ist dies machbar? wenn ja wie?
    Die Frage verstehe ich nicht.

    ich mein der import ist ja sehr gut aber es muss halt nicht ein dialogfeld mit ner eingabemaske erscheinen, sondern einfach nur direkt die tabelle wenn möglich in nem jinternalframe (dh die txt datei ist bekannt und der pfad soll im quellcode stehen)
    weiß jemand wie ich das anstelle?

    würd mich freuen
    Ab und an auch mal selbst einen Blick in die API werfen. Dann kommst Du auch selbst darauf, dass es so klappen müsste, wenn Du

    //Wir lesen aus "Aktien.txt".
    File eingabeDatei = new File("Pfadangabe+txt-File");
    FileReader eingabeStrom = new FileReader(eingabeDatei);
    BufferedReader eingabe = new BufferedReader(eingabeStrom);

    leicht abänderst. Der FileReader hat u.a. noch einen weiteren Konstruktor:
    public FileReader(String fileName) throws FileNotFoundException

    Also:
    //Wir lesen aus "Aktien.txt".
    FileReader eingabeStrom;
    try
    { // lt API kann die o.a. Exception fliegen, also muss die Aktion in einen try-catch-Block
    eingabeStrom = new FileReader("Aktien.txt");
    }
    catch(FileNotFoundException e)
    {
    e.printStackTrace();
    System.exit(0); // Ausstieg, wenn keine Daten eingelesen werden können
    }
    BufferedReader eingabe = new BufferedReader(eingabeStrom);

    Ggf. musst Du auf den Pfad noch achten, aber das findest Du jetzt bestimmt selbst heraus.
     

  15. #15
    simoasis simoasis ist offline Mitglied
    Registriert seit
    Apr 2004
    Beiträge
    10
    danke
    werd jetzt selbst noch was dran rumbasteln, dann läuft das ganze schon
     

Ähnliche Themen

  1. Matrix/ 2D-Array aus txt-Datei einlesen
    Von schickano im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 04.01.10, 12:24
  2. Einlesen von Datei in ein zwedim. Array
    Von sfuccma im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 25.11.08, 23:39
  3. csv-Datei in einen Array einlesen
    Von Menelao im Forum Java Grundlagen
    Antworten: 7
    Letzter Beitrag: 19.05.08, 19:55
  4. txt Datei in Array einlesen
    Von AccAkut im Forum .NET Datenverwaltung
    Antworten: 5
    Letzter Beitrag: 22.08.07, 09:52
  5. Datei zeilenweise in Array einlesen!
    Von abi22 im Forum PHP
    Antworten: 5
    Letzter Beitrag: 12.10.04, 13:21