ERLEDIGT
NEIN
NEIN
ANTWORTEN
15
15
ZUGRIFFE
5481
5481
EMPFEHLEN
-
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
-
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.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
Wo genau liegt das Problem? Beim Parsen der Textdatei oder bei der Übertragung in die Tabelle?
-
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?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?
-
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)
-
14.04.04 15:10 #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
-
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.
-
danke danke
das mit dem import funktioniert ja wunderbar
auch die andere anleitung ist mir eine hilfe
nochmals danke für die mitarbeit
-
Hallo Tom,Original geschrieben von Thomas Darimont
Hallo!
Versuchs mal hiermit:
Spaltenanzahl muss bei allen Datensatzen gleich sein ...
Code :1
import java.io.BufferedReader;
Gruß 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?
-
14.04.04 15:30 #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
-
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
-
14.04.04 16:56 #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
-
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
-
Die Frage verstehe ich nicht.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?
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 Duich 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
//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.
-
danke
werd jetzt selbst noch was dran rumbasteln, dann läuft das ganze schon
Ähnliche Themen
-
Matrix/ 2D-Array aus txt-Datei einlesen
Von schickano im Forum C/C++Antworten: 6Letzter Beitrag: 04.01.10, 12:24 -
Einlesen von Datei in ein zwedim. Array
Von sfuccma im Forum C/C++Antworten: 4Letzter Beitrag: 25.11.08, 23:39 -
csv-Datei in einen Array einlesen
Von Menelao im Forum Java GrundlagenAntworten: 7Letzter Beitrag: 19.05.08, 19:55 -
txt Datei in Array einlesen
Von AccAkut im Forum .NET DatenverwaltungAntworten: 5Letzter Beitrag: 22.08.07, 09:52 -
Datei zeilenweise in Array einlesen!
Von abi22 im Forum PHPAntworten: 5Letzter Beitrag: 12.10.04, 13:21





Zitieren

Login





