String aus txt in label für Tabelle einfügen

Hi,
hier also wieder eine neue Frage von mir.

Ich habe eine txt Datei als Speicher erstellt.
Jetzt möchte ich allerdings die gespeicherten Strings wieder auslesen und in einer Tabelle darstellen.
Vorneweg, ich habe mich noch nicht mit JTable beschäftigt, um meine Tabelle zu erstellen.
Ich habe zwar einmal kurz diesen thread http://www.java-forum.org/bilder-gu.../7035-jtable-teil-2-kommen-daten-tabelle.html überflogen, da aber unter den Möglichkeiten das auslesen über eine txt Datei nicht behandelt wurde, habe ich das erstmal verworfen.

Deswegen hätte ich gerne eure Hilfe, bei folgendem Problem.
Das ist mein momentaner Textsucher/ Stringsucher
Java:
import java.io.*;
public class textsucher
{
	String zeile;
	void  suchen()throws IOException
	{      FileReader fr = new FileReader("texttabelle.txt");
		BufferedReader br = new BufferedReader(fr);

		while( (zeile = br.readLine()) != null )
		       {
			System.out.println(zeile);}

		br.close();
		}

		public static void main(String[] args) throws IOException
		{
		textsucher werfer = new textsucher();
		werfer.suchen();
		}}

Der funktioniert soweit und gibt mir über die Konsole aus, was ich haben möchte.

Hier ist ein beispiel code für eine Tabelle (ist jetzt stark vereinfacht, damit der code nicht zu lang wird)
Java:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;

public class einfachetabellea extends JFrame 
{
/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
Container c;
JPanel jpnorth, jpcenter, jpsouth;
JButton alleobjektebutton;
JLabel rfidnummer = new JLabel();
String rfid ="leer";
JLabel barcode = new JLabel();
String bar ="leer";
String zeile;


	public einfachetabellea()
	{
		c = getContentPane();
		jpnorth = new JPanel(new GridLayout(1,6));
		jpnorth.add(new JLabel("RFID Nummer"));
		jpnorth.add(new JLabel("Barcode"));
		jpnorth.add(new JLabel("Archivnummer"));
		jpnorth.add(new JLabel("Name"));
		jpnorth.add(new JLabel("Ort"));
		jpnorth.add(new JLabel("zuletzt gefunden"));
		//Center wo in die labels reingeschrieben werden soll
		jpcenter = new JPanel(new GridLayout(1,6));
		jpcenter.add(rfidnummer);
		rfidnummer.setText(rfid);
		jpcenter.add(barcode);
		barcode.setText(bar);
		
		jpsouth = new JPanel(new GridLayout(1,1));
		alleobjektebutton = new JButton("Alle Objekte anzeigen");
		jpsouth.add(alleobjektebutton);
		alleobjektebuttonListenerklasse obL = new alleobjektebuttonListenerklasse();
		alleobjektebutton.addActionListener(obL);
		
		c.add(jpnorth,BorderLayout.NORTH);
		c.add(jpcenter,BorderLayout.CENTER);
		c.add(jpsouth, BorderLayout.SOUTH);	
		}
			
		class alleobjektebuttonListenerklasse implements ActionListener 
		{
			public void actionPerformed(ActionEvent e)
			{  	
			 	rfid = zeile;
				rfidnummer.setText(rfid);
				bar = zeile;
				barcode.setText(bar);
			}
		}
			
	public static void main (String []args)
	{
		einfachetabellea fenster = new einfachetabellea();
		fenster.setTitle("RFID Finder Tabellenansicht");
		fenster.setSize(900,700);
		fenster.setVisible(true);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
	}	
}

Mein großes Problem ist momentan, wie ich es schaffe, das ganze miteinander zu verbinden.
(Ich weiß, das hört sich etwas Plump an, aber ich habe schon ein paar Sachen versucht,
wie z.B. den textsucher als Funktion zu schreiben, mit dem return zeile, was aber auch nicht hingehauen hat, selbst wenn, hätte ich doch auch nur den letzten wert erhalten.
Mir gehen einfach die Ideen aus, ein bisschen input wäre genau das richtige. (kann aber auch an der Uhrzeit liegen 😀)

Ich sehe allerdings noch ein zweites Problem.
Da die txt ständig verändert wird, muss ich vor dem einlesen auch noch selber ein label erzeugen,
und es in dieser Tabellenform anordnen.
Ich hatte es mir ungefähr so vorgestellt: Button klick -> String lesen->label erzeugen->label beschreiben und das solange bis die Zeile null in der txt erreicht ist.
Ist das überhaupt möglich, oder habe ich mich schon völlig verrannt?

Ach ja, und derjenige der bis hier gelesen hat, schon einmal danke im voraus.
Gute Nacht!
 
Zuletzt bearbeitet:
Moin,

Also einfach den Code zusammenfügen. Anstatt beim Laden der Textdatei in der Console ausgeben kannst du die Einträge ja neu anlegen. Da du das ja immer wieder machen willst wäre es schlau, vorher das Patent Jpanel wieder zu leeren. Also ungefähr so:

Java:
jpnorth.removeAll();

Scanner s = new Scanner("texttabelle.txt");
while(s.hasNext()) {
  jpnorth.add(new JLabel(s.nextLine()));
}
 
Erstmal danke, das du mir so spät Abends noch eine Antwort geschrieben hast,
aber es tut mir Leid, ich kann dir leider nicht folgen.

So wie ich dich verstanden habe, soll ich
Java:
jpnorth.removeAll();
 
Scanner s = new Scanner("texttabelle.txt");
while(s.hasNext()) {
  jpnorth.add(new JLabel(s.nextLine()));
}

einfach beim actionPerformed einfügen?

Ich hatte das einlesen oben ja mit java.io.*;
bei dir läuft das ja anscheinend mit java.util.Scanner.*;
Was natürlich egal wäre, wenn es klappen würde, aber ich kann dir einfach nicht ganz folgen.
Bei IO hat ich ja auch das Problem, das ich z.B. nicht wusste, wo ich das "throws IOException"
anhänge, da der ActionListener ja selber schon "implements ActionListener" hatte, und dann immer Fehlermeldungenkammen.
Deswegen hatte ich versucht in den Listener selber noch eine Methode einzubauen, die dann das "throws IOException" bekommen hat, was zwar erstmal von Eclipse akzeptiert wurden ist, aber trotzdem nicht funktioniert hat.

Sollte bei while bei dir nicht besser auch etwas mit null verglichen werden, da leere Zeilen durchaus auftreten können, aber erst aufgehört werden soll, wenn die letzte Zeile gelesen wurde?
(Achja, die labels sollten im jpcenter erzeugt werden, was aber vermutlich erstmal egal ist.)

Ich füge mal den Code an, so wie ich dich verstanden habe und habe es mit dem Kommentar
//Lösungsansatz von jemandzehage kenntlich gemacht.
Vermutlich meinst du das aber doch ein bisschen anders, oder?
Wäre nett, wenn du mir noch ein bisschenunter die Arme greifen könntest.

Java:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.util.Scanner.*; 						//Lösungsansatz von jemandzehage

public class einfachetabellea extends JFrame 
{
/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
Container c;
JPanel jpnorth, jpcenter, jpsouth;
JButton alleobjektebutton;
JLabel rfidnummer = new JLabel();
String rfid ="leer";
JLabel barcode = new JLabel();
String bar ="leer";
String zeile;


	public einfachetabellea()
	{
		c = getContentPane();
		jpnorth = new JPanel(new GridLayout(1,6));
		jpnorth.add(new JLabel("RFID Nummer"));
		jpnorth.add(new JLabel("Barcode"));
		jpnorth.add(new JLabel("Archivnummer"));
		jpnorth.add(new JLabel("Name"));
		jpnorth.add(new JLabel("Ort"));
		jpnorth.add(new JLabel("zuletzt gefunden"));
		//Center wo in die labels reingeschrieben werden soll
		jpcenter = new JPanel(new GridLayout(1,6));
		jpcenter.add(rfidnummer);
		rfidnummer.setText(rfid);
		jpcenter.add(barcode);
		barcode.setText(bar);
		
		jpsouth = new JPanel(new GridLayout(1,1));
		alleobjektebutton = new JButton("Alle Objekte anzeigen");
		jpsouth.add(alleobjektebutton);
		alleobjektebuttonListenerklasse obL = new alleobjektebuttonListenerklasse();
		alleobjektebutton.addActionListener(obL);
		
		c.add(jpnorth,BorderLayout.NORTH);
		c.add(jpcenter,BorderLayout.CENTER);
		c.add(jpsouth, BorderLayout.SOUTH);	
		}
			
		class alleobjektebuttonListenerklasse implements ActionListener 
		{
			public void actionPerformed(ActionEvent e)
			{  	
				jpcenter.removeAll();			//Lösungsansatz von jemandzehage	
				Scanner s = new Scanner("texttabelle.txt");
				while(s.hasNext()) {
				  jpcenter.add(new JLabel(s.nextLine()));
				  
				}
				//rfid = zeile;
				//rfidnummer.setText(rfid);
				//bar = zeile;
				//barcode.setText(bar);
			}
		}
			
	public static void main (String []args)
	{
		einfachetabellea fenster = new einfachetabellea();
		fenster.setTitle("RFID Finder Tabellenansicht");
		fenster.setSize(900,700);
		fenster.setVisible(true);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
	}	
}
 
Zuletzt bearbeitet:
Ich versuche mein erstes Problem nochmal an einem ganz einfachen Beispiel zu verdeutlichen.
(Ich glaube ich hatte zu viele Fragen auf einmal gestellt)
Hier habe ich das Fenster, wo wenn ich unten auf den Button drücke, sich der Inhalt des Labels ändert. Zeile 39-40.
Java:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;								
public class einfachetabelleb extends JFrame 
{
/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
Container c;
JPanel jpcenter, jpsouth;
JButton alleobjektebutton;
JLabel rfidnummer = new JLabel();
String rfid ="leer";
String zeile;

	public einfachetabelleb()
	{
		c = getContentPane();
		jpcenter = new JPanel(new GridLayout(1,6));
		jpcenter.add(rfidnummer);
		rfidnummer.setText(rfid);
		
		jpsouth = new JPanel(new GridLayout(1,1));
		alleobjektebutton = new JButton("Alle Objekte anzeigen");
		jpsouth.add(alleobjektebutton);
		alleobjektebuttonListenerklasse obL = new alleobjektebuttonListenerklasse();
		alleobjektebutton.addActionListener(obL);
		
		c.add(jpcenter,BorderLayout.CENTER);
		c.add(jpsouth, BorderLayout.SOUTH);	
		}
			
		class alleobjektebuttonListenerklasse implements ActionListener 
		{
			public void actionPerformed(ActionEvent e)
			{  	
				rfid = "Hier sool später der String aus der txt Datei stehen";
				rfidnummer.setText(rfid);
			}		}

	public static void main (String []args)
	{
		einfachetabelleb fenster = new einfachetabelleb();
		fenster.setTitle("RFID Finder Tabellenansicht");
		fenster.setSize(900,700);
		fenster.setVisible(true);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
	}	
}

Hiermit kann ich z.B eine Zeile aus einer Datei rauslesen und zum überprüfen in der Konsole ausgegeben.
Java:
import java.io.*;

	class ReadFile1
	{
	  public static void main(String[] args) throws IOException
	  {
	    FileReader fr = new FileReader("texttabelle.txt");
	    BufferedReader br = new BufferedReader(fr);
	    String zeile1 = br.readLine();
	    System.out.println(zeile1);
	    
	    br.close();
	  }
	}

Wenn ich jetzt aber die Klasse ActionListenern anpasse, z.B. so
Java:
class alleobjektebuttonListenerklasse implements ActionListener 
		{
			public void actionPerformed(ActionEvent e)
			{  	
				FileReader fr = new FileReader("texttabelle.txt");
				BufferedReader br = new BufferedReader(fr);
				rfid = br.readLine();
				rfidnummer.setText(rfid);
				br.close();
			}	
		}

Dann verwende ich nirgendwo das throws IOException, weil wen ich es hinter die Klasse schreibe, ich nur eine Fehlermeldung bekomme. Wo soll ich es hinschreiben, bzw wie kann ich das realisieren was ich vorhabe.
Ich wäre dankbar, wenn jemand auch kurz einen Satz dazuschreibt, was ich ändern soll.
 
Zuletzt bearbeitet:
Hi, ich hatte glaube ich deine Frage nicht richtig verstanden. Also ob du es mit Scanner oder BufferedReader machst ist prinzipiell egal, ich finde nur das Scanner einfacher zu verwenden ist und auch mehr funktionen zum auslesen bietet.

Solltest du den Scanner verwenden, solltest du in der while-Schleife trotzdem mit hasNext() arbeiten. Sollte dann eine leere Zeile aus dem Dokument gelesen werden erhälst du einen leeren String und nicht null.

Um die Exception abzufangen musst du einen try-catch-Block verwenden. So müsste das ganze dann funktionieren:

Java:
public void actionPerformed(ActionEvent e) {
	try{
		FileReader fr = new FileReader("texttabelle.txt");
		BufferedReader br = new BufferedReader(fr);
		 rfid = br.readLine();
		 rfidnummer.setText(rfid);
		br.close();
	} catch(IOException ex) {
		//do nothing
	}
}
 
@jemandzehage:

Anfängern jetzt schon schön Exception Handling à la do nothing zu erklären ist ziemlich schlecht. Exceptions sollten im Minimalfall mit e.printStackTrace(); behandelt werden...
 
Danke an euch beide, für eure zahlreichen Tipps.

Aber bitte gewöhn dir lowerCamelCase an, der Code ist so nur bedingt lesbar.

Da hast du völlig recht, das werde ich Zukunft machen.

Um die Exception abzufangen musst du einen try-catch-Block verwenden. So müsste das ganze dann funktionieren:

Das war im Grunde genau das, was ich gesucht habe, ich wusste nur nicht wie es heißt.
Ich war mir einfach sicher, das da was fehlt, und das ich das "IOException" beachten muss,
aber ich wusste nicht wie.

Ich habe mir deinen Link und noch ein paar andere Sachen zu den Exceptions und try and catch durchgelesen,
das war wirklich sehr hilfreich, um überhaupt deinen code zu verstehen.
Entweder habe ich die ganze Sache nach 5 Jahre vergessen, oder wir hatten es damals in der Schule nicht,
aber deswegen versuche ich ja grade mein Grundwissen aufzufrischen und zu erweitern.

Ich schaue mir jetzt mal JTable an, und entscheide mich dann, wie ich weiter mit meinem Projekt mache.
Danke nochmal😀

€achja, ich gehe momentan immer noch davon aus, das ich die daten aus der txt auch in das JTable einfügen kann, auch wenn ich noch nichts darüber weiß.
Wenn nicht, muss ich mir wohl noch was anderes finden, wenn mir jemand schon vorneweg einen Tipp geben will, kann er das gerne tun. Aber mit dem JTable werde ich mich ohnehin als nächstes beschäftigen.
 
Zuletzt bearbeitet:

Zurück
Oben