# Eingelesene txt file per JTabel ausgeben



## BeneS (9. September 2004)

hey folks,

ich habe bereits eine txt Datei eingelesen und die Wörter in einem array (text[i]) abgespeichert.

Ist das jetzt irgendwie möglich dieses Array auf einer tabelle mit JTabel auszugeben.

Ich habe schon irgendwie soetwas versucht:

```
String Spalten [] = new String[8];
	  String Zeilen[][] = new String[100][8];
	  
	  for (int j=0;j<8;j++)
	  {
	  text[j]=Spalten[j];
	  }
	  
	  for(int k=10;k<100;k++)
	  {
	  text[k]=Zeilen[k][k]; //das kann glaub ich gar ned  oder?
	  }
	  
	  JTable table = new JTable(Zeilen, Spalten);
```

Keine Ahnung,ob das der richtige Ansatz ist... Ich hab noch nicht ganz soviel Plan.Aber ich muss das grad im Praktikum für meine Firma machen...

Freue mich über jede Hilfe.

mfg

Bene


----------



## Snape (9. September 2004)

*Same procedure...*



			
				BeneS hat gesagt.:
			
		

> hey folks,
> ich habe bereits eine txt Datei eingelesen und die Wörter in einem array (text[ i ]) abgespeichert.
> 
> Ist das jetzt irgendwie möglich dieses Array auf einer tabelle mit JTabel auszugeben.
> ...



Diese Frage taucht immer wieder auf, vielleicht bietet sich ein Tutorial dazu an...
Sorry, Dir das haarklein zu erklären dauert zu lange. Schau mal im Archiv / Suche nach TableModel. Diese Krücke mit Array habe ich mir jedenfalls schon lange abgewöhnt...


----------



## Vincentius (10. September 2004)

> _Original geschrieben von BeneS _
> 
> ```
> ...
> ...


Ich weiß nicht, für was die Variable *text* steht, aber sollte das andersrum sein:

```
...
Spalten[j]=text[j];
...
Zeilen[k][k]=text[k];
...
```


----------



## BeneS (13. September 2004)

in 
	
	
	



```
text[i]
```
 sind die einzelnen worte aus der txt file gespeichert.

ich habe das mit dem txt mal gelassen und mich einfach mal an eine einfache tabelle mit menüleiste gemacht. diese will ich nach und nach modifizieren. Das Problem ist gerade, dass meine tabelle nicht automatisch die scrollbar mit einbindet :

```
JMenuBar menu = new JMenuBar(); //Menüleiste erstellen
		setJMenuBar(menu);
		JMenu datei = new JMenu("Datei");
		JMenu bearbeiten = new JMenu("Bearbeiten");
		JMenuItem öffnen = new JMenuItem("Öffnen");
		JMenuItem beenden = new JMenuItem("Beenden");
		JMenuItem kopieren = new JMenuItem("Kopieren");
		JMenuItem einfügen = new JMenuItem("Einfügen");
		
		//Items zur Leiste hinzufügen
		datei.add(öffnen);
		datei.add(beenden);
		bearbeiten.add(kopieren);
		bearbeiten.add(einfügen);
		menu.add(datei);
		menu.add(bearbeiten);
		
		 //Tabelle einfügen
		CustomModel meins = new CustomModel();
		JTable table = new JTable(meins);
		table.setSelectionBackground(Color.black);
		table.setSelectionForeground(Color.white);
		table.setColumnSelectionAllowed(true);
		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
	
		 //ScrollPanel erstellen
		JPanel panel = new JPanel();
		JScrollPane scroll = new JScrollPane(table);
		panel.setLayout(new BorderLayout());
		panel.add(scroll, BorderLayout.CENTER);
		
	                     getContentPane().add(table);
```

Ich weiß nicht wo der Fehler liegt.die Menüleiste sitzt perfekt, aber die Scrollbar wird bei der Vergrößerung des Fensters nicht eingefügt.

wäre dankbar für tips.

mfg

Bene


----------



## Vincentius (13. September 2004)

> _Original geschrieben von BeneS _
> *getContentPane().add(table);*


Statt *table* sollte hier *panel* stehen.


----------



## BeneS (13. September 2004)

stimmt, jetzt gehts :-(  aber wenn man da scroll reinschreibt, funktionierts auch


----------



## Thomas Darimont (13. September 2004)

Hallo!


```
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

public class JTableTextDemo extends JFrame {

	private JTable table;
	private JScrollPane scrollPane;
	private String filePath = "c:/Data.csv";
	private JButton btnLoad, btnSave;
	private Object[] tableHeader;
	private static final char SEPARATOR_CHAR = ';';
	private boolean occupied = false;

	public JTableTextDemo() {
		super("JTableTextDemo");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		init();

		setVisible(true);
		pack();

	}

	/**
	 * 
	 */
	private void init() {

		ActionListener listener = new ActionHandler();

		btnLoad = new JButton("Load");
		btnLoad.addActionListener(listener);
		getContentPane().add(btnLoad, BorderLayout.CENTER);

		btnSave = new JButton("Save");
		btnSave.addActionListener(listener);
		getContentPane().add(btnSave, BorderLayout.SOUTH);

		table = new JTable(0, 0);

		table.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent evt) {
				int code = evt.getKeyCode();
				if (code == KeyEvent.VK_ENTER || code == KeyEvent.VK_TAB) {
					int row = table.getSelectedRow();
					int column = table.getSelectedColumn();
					(
						(DefaultTableModel) table
							.getModel())
							.fireTableCellUpdated(
						row,
						column);
				}

			}
		});

		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		scrollPane = new JScrollPane(table);
		getContentPane().add(scrollPane, BorderLayout.NORTH);

	}

	public static void main(String[] args) {
		new JTableTextDemo();
	}

	private Object[][] readData() {
		File file = new File(filePath);

		BufferedReader br = null;
		try {

			br = new BufferedReader(new FileReader(file));
			String line = null;
			StringTokenizer tokenizer = null;
			int clmCnt = 0;
			List list = new ArrayList();

			while ((line = br.readLine()) != null) {
				tokenizer = new StringTokenizer(line, ";");
				clmCnt = tokenizer.countTokens();
				Object[] rowData = new Object[clmCnt];
				int i = 0;
				while (tokenizer.hasMoreTokens()) {
					rowData[i++] = tokenizer.nextElement();
				}
				list.add(rowData);
			}
			tableHeader = new Object[clmCnt];
			for (int i = 0; i < tableHeader.length; i++) {
				tableHeader[i] = "Column" + i;
			}

			int size = list.size();
			Object[][] rows = new Object[size][];
			for (int i = 0; i < size; i++) {
				rows[i] = (Object[]) list.get(i);
			}

			list.clear();

			return rows;

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		}

		return new Object[0][0];
	}

	public void store() {
		BufferedWriter bw = null;
		File file = new File(filePath);
		try {
			bw = new BufferedWriter(new FileWriter(file));

			DefaultTableModel dtm = (DefaultTableModel) table.getModel();
			Object[] oa = dtm.getDataVector().toArray();
			for (int i = 0; i < oa.length; i++) {
				Object[] o = ((Vector) oa[i]).toArray();
				for (int j = 0; j < o.length; j++) {
					bw.write(o[j].toString());
					bw.write(SEPARATOR_CHAR);
				}
				bw.newLine();
			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (bw != null) {
				try {
					bw.flush();
					bw.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		}
	}

	class ActionHandler implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			Object src = e.getSource();
			if (src == btnLoad) {
				if (occupied)
					return;
				SwingUtilities.invokeLater(new Runnable() {
					public void run() {
						occupied = true;
						DefaultTableModel dtm =
							new DefaultTableModel(readData(), tableHeader);
						table.setModel(dtm);
						occupied = false;
					}
				});

			} else if (src == btnSave) {
				if (occupied)
					return;
				SwingUtilities.invokeLater(new Runnable() {
					public void run() {
						occupied = true;
						store();
						occupied = false;
					}
				});
			}
		}
	}
}
```

data.csv

```
1;2;3;4;5;6;7
3;5;7;9;11;13;7
8;12;16;20;24;20;3
20;28;36;44;44;23;3
48;64;80;88;67;26;2
112;144;168;155;93;28;11
256;312;323;248;121;39;5
568;635;571;369;160;44;6
```

HTH
Gruß Tom


----------



## BeneS (14. September 2004)

wahnisinn. hätt ich jetzt nicht erwartet.zumal ich mich in das meiste erst reinarbeiten muss... :-| . 

ICh versteh jetzt aber nicht, warum das so auch ohne TableModel geht?Wo sagst du denn dem Compiler 
"Bau ein Table mit so viel Spalten und so viel zeilen mir dem und dem inhalt?" 

ist das alles in der read Funktion?


----------



## Hasba (23. März 2005)

Hallo Mr. Tom, unser Java Profi,
ich habe eine CSV-Datei ausgelesen und erst mal wieder in eine CSV-Datei gespeichert später soll ich die Daten in eine Jtable ausgeben.bevor ich den Schritt mache muss ich die Daten sortieren. 
hier eine Auschnitt der CSV-Datei vor dem auslesen:
Auftraggeber	Material	Periode	OAuftMnge	OAuftMnge	Off.Auftrg	Off.Auftrg	Um Netto1	Um Netto1	Gu Netto1	Gu Netto1
11010     Müller Mustermann	A	2004.10	21	ST	0	$	0	$	0	$
11010      Hartmann GmbH	A	2005.10	40	ST	0	$	0	$	0	$
11010      Oliver Jansen	B	2002.01	51	ST	0	$	0	$	0	$
11011      Bernd Muster	C	2003.11	1	ST	0	$	0	$	0	$
11011      Bernd Hans	D	2005.12	11	ST	0	$	0	$	0	$
11010     Müller Mustermann	A	2001.04	0	ST	0,00	$	0	$	0	$
11010      Hartmann GmbH	C	2001.04	11	ST	0,00	$	0	$	0	$
11010      Oliver Jansen	F	2001.04	1	ST	0	$	0	$	0	$
11011      Bernd Muster	D	2005.05	0	ST	0	$	1.020,00	$	0	$
diese ist als CSV gespeichert. d.h. mit ";" getrennt.

also wichtig ist für mich das 2 und 3 Feld: also Material und Menge die möchte ich sortiert und summiert: z.B.:  vom Material A haben wir 4 in Menge unsw.

diese sortierte Daten möchte anschliessend in JTable einfach anzeigen.

bitte um Hilfe. Falls Du den kompletten Code braucht kann ich Dir per e-mail schicken! ich denke das ist die Arbeit con minuten wenn Du dir mal den Code schaust.
danke noch mal im voraus


----------



## Snape (24. März 2005)

Hasba hat gesagt.:
			
		

> Hallo Mr. Tom, unser Java Profi,
> ich habe eine CSV-Datei ausgelesen und erst mal wieder in eine CSV-Datei gespeichert später soll ich die Daten in eine Jtable ausgeben.bevor ich den Schritt mache muss ich die Daten sortieren.
> 
> diese sortierte Daten möchte anschliessend in JTable einfach anzeigen.
> ...



Also zumindest eine (allgemeine) Sortierung in Tabellen nach Spaltenklick (http://www.java-forum.org/de/viewtopic.php?t=7704) ist nicht gerade trivial und auch nicht "mal eben" in einer Stunde erledigt.


----------



## Thomas Darimont (24. März 2005)

Hallo!

*räusper*
http://www.tutorials.de/tutorials193299.html&highlight=JTable

Gruß Tom


----------

