Textdatei in JTable

klatuu82

Mitglied
hi ich habe folgendes problem
ich habe eine Jtable
Java:
String[][] inhalttest = {{"(Name)","(Vorname)","(Telefon)","(geb)"},
				{"(test2)","(Martina)","(2463848)","(32.65.1999)"}};
String[] ueberschrift = {"Name","Vorname","Telefon","Bemerkung"};
		
ausgabe = new JTable(inhalttest,ueberschrift);

und ich habe eine textdatei mit genau diesen daten als inhalt die ich per bufferedreader auslesen kann
Java:
public static void main(String[] args) throws IOException
	{
		FileReader fileReader = new FileReader(new File("datenbank.txt"));
		BufferedReader in = new BufferedReader(fileReader);
		
		String tmp = "";
		
		while ( (tmp = in.readLine() ) != null) {

			System.out.println(tmp);

		}

		//Schließe den InputStream
		in.close();
		fileReader.close();		
	}

so nun zur frage wie kann ich diese beiden classen verbinden

ich möchte die daten per Stringtokenizer zerlegen und in die JTable einfügen kann mir da einer helfen ich habe so gut wie keinen plan von JTable
oder is es besser das nur in einem JTextArea auszugeben??
 
Zuletzt bearbeitet von einem Moderator:
Das Problem oder die Wissenlücke besteht wohl eher beim Verarbeiten der ausgelesenen Dateiinhalte.
Wie man Daten in eine JTable bekommt weisst Du ja schon, z.B. als String[][]
Du musst also nur den Inhalt des Textfiles in ein solches Stringarray reinbekommen.
Das hängt u.a. davon ab, wie die Werte in der Datei von einander getrennt sind, oft durch z.B. ein TAB oder ein ;. Bei einen Strichpunkt kann man jede einzelne Zeile wie folgt zerlegen.
Java:
while ( (tmp = in.readLine() ) != null) {
            String[] line = tmp.split(";");
            ...
line steckt man dann in sein String[][] und das dann in die JTable.
Das einzig unschöne daran ist, dass man bei Arrays die Größe vorab festlegen muss und diese nicht dynamisch erweiterbar sind.
 
okay das habe ich ja verstanden aber wie bekomme ich das nun in das JTabel weil ich habe ja sozusagen
kein festen raw in dem prog kann der benutzer ja soviele daten anlegen wie er moechte
und das führt dann dazu das ich ja einen flexieblen raw brauche oder er nur soviel raws anlegt wie ich daten in der .txt habe
is das zumachen??
 
Also liegt das Problem doch da...
Benutze eine Liste und ein eigenes TableModel
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class Test {
	public static void main(String[] args) throws IOException {

		JFrame frame = new JFrame();
		JPanel panel = new JPanel();
		final PersonTableModel model = new PersonTableModel();
		JTable table = new JTable(model);

		JButton btn = new JButton("lese Personen");
		btn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// entweder erst komplett alle erstellen in einer liste ablege
				// und dem model uebergeben
				// oder direkt mit addPerson dem model hinzufügen !
				List<Person> persons = new ArrayList<Person>();
				// lese hier deine textdatei oder wie auch immer

				// erstelle anhand der infos einzelne person-objekte
				persons.add(new Person("(Name)", "(Vorname)", "(Telefon)",
						"(geb)"));
				persons.add(new Person("(test2)", "(Martina)", "(2463848)",
						"(32.65.1999)"));

				model.setPersons(persons);
			}
		});
		panel.add(new JScrollPane(table));
		panel.add(btn);
		frame.add(panel);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();
		frame.setVisible(true);

	}
}

class Person {
	private String name, vorname, telefon, geb;

	public Person(String name, String vorname, String telefon, String geb) {
		super();
		this.name = name;
		this.vorname = vorname;
		this.telefon = telefon;
		this.geb = geb;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getVorname() {
		return vorname;
	}

	public void setVorname(String vorname) {
		this.vorname = vorname;
	}

	public String getTelefon() {
		return telefon;
	}

	public void setTelefon(String telefon) {
		this.telefon = telefon;
	}

	public String getGeb() {
		return geb;
	}

	public void setGeb(String geb) {
		this.geb = geb;
	}

}

class PersonTableModel extends AbstractTableModel {

	private List<Person> persons = new ArrayList<Person>();

	public PersonTableModel() {
	}

	public PersonTableModel(List<Person> persons) {
		this.persons = persons;
	}

	@Override
	public int getColumnCount() {
		return 4;
	}

	@Override
	public int getRowCount() {
		return persons.size();
	}

	public void addPerson(Person p) {
		this.persons.add(p);
		fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1);
	}

	public void setPersons(List<Person> persons) {
		this.persons = persons;
		fireTableDataChanged();
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		Person p = persons.get(rowIndex);
		switch (columnIndex) {
		case 0:
			return p.getName();
		case 1:
			return p.getVorname();
		case 2:
			return p.getTelefon();
		case 3:
			return p.getGeb();
		default:
			return null;
		}
	}

	@Override
	public String getColumnName(int column) {
		switch (column) {
		case 0:
			return "Name";
		case 1:
			return "Vorname";
		case 2:
			return "Telefon";
		case 3:
			return "Bemerkung";
		default:
			return null;
		}
	}
}
 

Neue Themen


Zurück
Oben