JTable wird nicht erzeugt, wieso?

Tino124

Mitglied
Hallo allerseits, ich habe folgendes Problem. Und zwar möchte ich, dass über einen Buttonklick in meiner GUI eine befüllte Tabelle erzeugt wird, die ihre Daten von einer XML Datei bezieht. Das ganze ist auch professorisch ohne den Button gelaufen, aber nun wird mir keine Exception übergeben, das ganze Funktioniert aber Trotzdem nicht. Hier einmal mein Code :

Java:
import java.awt.Button;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;

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


public class Test extends AbstractTableModel{
	
	//erstelle Frame
	
	/*
	 * 
	 */
	private static final long serialVersionUID = 1L;
//erstellt statische Variablen für die Fenster
  static TextArea ta;
  static TextField tf;
  static Vector<String> data;
  static Vector<String> columns;
  private static JTextField eingabe;
  private static JButton bestätigen;

   public static void main(String[] args) {
	   
			Test t = new Test();
	        JTable table = new JTable();
	        table.setModel(t);
	        table.getTableHeader().setDefaultRenderer(new DefaultTableCellRenderer()
	        {
	            /**
				 * 
				 */
				private static final long serialVersionUID = 1L;
				String[] cols = {"Linie","Ziel","Platz","HF","Abfahrt in (min)"};
	            public Component getTableCellRendererComponent(JTable arg0,Object arg1, boolean arg2, boolean  arg3, int arg4,int col) 
	            {
	                this.setText(cols[col]);                                        
	                return this;
	            }
	        });
	        
	        JScrollPane scrollpane = new JScrollPane(table);
	        JPanel panel = new JPanel();
	        panel.add(scrollpane);
	        JFrame frame = new JFrame();
	        frame.setTitle( "Mir fällt kein sinnvoller Name ein PROGRAMM" );
	        frame.setSize(600,500);
	 	    frame.setLocation(100,100);
	        JTextField TF = new JTextField("");
	        JButton Button = new JButton("Klick mich!!");
	        frame.add(panel, "North");
	        frame.add(TF, "Center");
	        frame.add(Button, "South");
   
   			//Methode für den Button
	        
   Button.addMouseListener(
   new MouseAdapter(){
   public void mouseClicked(MouseEvent e){
	  
   try {
	   Test t = new Test();
       JTable table = new JTable();
       table.setModel(t);
	   Test2.lesen(t);
	   

        System.out.println("test");
} catch (Exception e1) {
	e1.printStackTrace();
}
   }
   
   
   }
   );
   
   //macht das fenster sichtbar
   frame.setVisible(true);
   }
   

   //Getter
	public TextArea ta(){
	return  ta;
	}



	@Override
	public Object getValueAt(int arg0, int arg1) {
		return null;
	}
	public static JButton getBestätigen() {
		return bestätigen;
	}

	public static void setBestätigen(JButton bestätigen) {
		Test.bestätigen = bestätigen;
	}

	public static JTextField getEingabe() {
		return eingabe;
	}

	public static void setEingabe(JTextField eingabe) {
		Test.eingabe = eingabe;
	}


	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return 0;
	}


	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return 0;
	}
	


}

Und die 2 Klasse :

Java:
import java.io.*;
import java.net.URL;
import java.util.Vector;
 
import javax.swing.table.AbstractTableModel;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
 
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
 
public class Test2 {
 
    /**
     * @param t
     */


	public static void lesen(Test t) throws Exception {
	
    	
        try {
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(new URL("xy.php")
                            .openStream());
            doc.getDocumentElement().normalize();
               
                
                
            NodeList n1 = doc.getElementsByTagName("Linie");
            NodeList n2 = doc.getElementsByTagName("Ziel");
            NodeList n3 = doc.getElementsByTagName("Platz");
            NodeList n4 = doc.getElementsByTagName("HF");
            NodeList n5 = doc.getElementsByTagName("Zeit");
 

            
            NodeList DFIpublic = doc.getElementsByTagName("Abfahrt");
            Test.data = new Vector<String>();
            Test.columns = new Vector<String>();
            for (int i = 0; i < DFIpublic.getLength(); i++)            
            {                 
             Test.data.addElement(n1.item(i).getFirstChild().getNodeValue());
             Test.data.addElement(n2.item(i).getFirstChild().getNodeValue());
             Test.data.addElement(n3.item(i).getFirstChild().getNodeValue());
             Test.data.addElement(n4.item(i).getFirstChild().getNodeValue());
             Test.data.addElement(n5.item(i).getFirstChild().getNodeValue());            
            
            }
            Test.columns.add("");
            Test.columns.add("");
            Test.columns.add("");
            Test.columns.add("");
            Test.columns.add("");

 
        } catch (Exception e) {
            e.printStackTrace();
        }
	}
    public int getRowCount() {
        return Test.data.size() / getColumnCount();
    }
 
    public int getColumnCount() {
        return Test.columns.size();
    }
 
    public Object getValueAt(int rowIndex, int columnIndex) {
        return (String) Test.data.elementAt((rowIndex * getColumnCount())
                + columnIndex);
    }
}


Habt gnade ich bin Java Neuling :rtfm:
 
Zuletzt bearbeitet von einem Moderator:
C

Camino

Gast
Hmm, keine Ahnung, was genau du da machst, aber deine Klasse Test ist das TableModel und dort hast du auch deine main-Methode und dein JTable drin. Ich würde das mal anders (besser) strukutrieren und für GUI und Model separate Klassen anlegen. Vielleicht wird es dann übersichtlicher...

EDIT: Also einfach erstmal das TableModel auslagern z.B. in eine Klasse MyTableModel extends AbstractTableModel, und das dann in der Klasse Test der JTable übergeben.
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
in einem Listener nur eine JTable zu erzeugen kann nur begrenzte Auswirkungen haben,
es fehlt offensichtlich z.B. das Einfügen in die GUI?

zur Laufzeit die GUI zu verändern ist generell unsauber, bringt das Layout durcheinander, ist das nötig?
kann es auch bei einer von Anfang an vorhandenen JTable bleiben, deren Model ausgetauscht wird?

auch noch besser sind versteckte GUI-Seiten, mit CardLayout eingeblendet
 

Tino124

Mitglied
Nur das Model austauschen würde auch gehen, nur kenne ich mich mit dem JTable gar nicht aus. Das war ein Vorschlag von meinem "Lehrer" und ich hab das ganze nach einer Musterlösung aus dem Internet aufgebaut. Wie würde das denn aussehen wenn ich ein "Model" austausche?
 
S

SlaterB

Gast
die erste Table in einem Instanzattribut speichern, z.B. 'table',
dann bist du mit Zeile 80
> table.setModel(t);
schon gut dabei, Zeile 79 weg

von Test aus ein neues Test-Objekt zu erzeugen ist aber generell komisch,
da bist du mit eigener TableModel-Klasse, darin die Datenfelder usw., wohl besser dran,
bei begrenzten Verständis wäre das jetzt aber viel zu erklären..

das lesen() besser aber VOR Zeile 80
 
C

Camino

Gast
Zum Grundverständnis der JTable: Normalerweise hast du 1 JTable und 1 TableModel. Das TableModel wird der JTable gesetzt. Im TableModel hast du die Daten, welche du in der JTable anzeigen möchtest. Wenn sich nun Daten ändern oder aktualisieren sollen, änderst du die Daten im TableModel und das Model aktualisiert dann die Daten in der JTable.

Aber versuch doch mal, das TableModel in eine eigene Klasse auszulagern und in der Klasse Test der JTable zu übergeben. Du wirst dann sehen, wie einfach und übersichtlicher das plötzlich wird.
 
C

Camino

Gast
Ja, die JTable gehört zur GUI (oder auch View). Und normalerweise trennst du auch das Model (TableModel, Daten) von der View (GUI, Ansicht).
 

Tino124

Mitglied
Ach mist, jetzt hab ichs verstanden. Sorry, das JTable macht mich ganz wirr im Kopf!
Warum wird verlangt das ich das JTable auf Final setzte, wenn ich im Listener kein Neues Jtable erstelle sondern nur das Model ändere? Ein Finaler Wert kann doch nicht mehr geändert werden oder ist mein Standpunkt in dem Fall auch falsch?
 
S

SlaterB

Gast
die Variable ist final, kann nicht auf eine andere JTable oder selbst null geändert werden, die JTable darf noch verändert werden,
für Listener ist das eben so damit Java sich sicher ist was dort später zu verwenden ist, ein Thema für sich


mit final gehts, ja, ich dachte der Listener stände ganz woanders, dann wäre Instanzattribut angebracht, was wiederum nicht final ginge
(also es wird in dieser Frage weitergehen, ob alles funktioniert muss sich noch Zeigen, viele Haken möglich)
 

Tino124

Mitglied
Ich ab jetzt mal ein paar Stündchen dran rumgetüfftelt und bin mal wieder zu keinem Ergebnis gekommen, ich glaube mein Lösungsansatz ist komplett falsch. Ich muss das ganze nochmal komplett umstrukturieren. Oder es funktioniert doch irgendwie nur ich bin zu blöd das auf die Reihe zu bekommen. Ich werde das ganze jetzt nochmal neu schreiben und statt den Vectoren mal ein 2 dim. Array verwenden und das JTable von dem eigentlichen UI abkoppeln, in der Hoffnung so zu einem Ergebnis zu kommen.
 

Tino124

Mitglied
Das habe ich heute auch mehrmals probiert, aber ich bin auf kein Ergebnis gekommen. Entweder du hast Recht und meine Kenntnisse reichen nicht soweit oder der Code den ich da oben geschrieben hab ist völlig schwachsinnig, eins von beiden wird es sein. Aber danke für den Vorschlag.
 
C

Camino

Gast
Du hättest einfach nur eine Klasse schreiben müssen, abgeleitet von AbstractTableModel. Zum Beispiel
Code:
MyTableModel extends AbstractTableModel
. Eclipse (falls du damit arbeitest) bietet dir dann sogar an, automatisch die benötigten Methoden zu erstellen. Von diesem Model hättest du dann in deiner Hauptklasse ein Objekt erstellt und der JTable im Konstruktor mit übergeben.
Java:
MyTableModel tableModel = new MyTableModel();
JTable myTable = new JTable(tableModel);
Alles weitere mit den Daten hättest du dann im Model gemacht. Wäre auf jeden Fall schon mal übersichtlicher und damit auch weniger fehleranfällig. Ich oder andere hätten dir da bestimmt weiter geholfen, aber wenn du es noch nicht mal versuchst...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
D JTable Zeile wird nicht in MySQL gelöscht Java Basics - Anfänger-Themen 16
M JTable wird nicht aktualisiert Java Basics - Anfänger-Themen 4
S Warum wird JTable nicht angezeigt Java Basics - Anfänger-Themen 2
H JTable Überschrift der Tabelle wird nicht angezeigt Java Basics - Anfänger-Themen 5
S Eurozeichen in JTable wird nicht angezeigt Java Basics - Anfänger-Themen 3
H JTable in JScrollPane: Scrollbar wird nicht angezeigt. Java Basics - Anfänger-Themen 2
I JTable in neuem Fenster wird nicht aktualisiert Java Basics - Anfänger-Themen 4
L JTable wird beim Scrollen nicht richtig gezeichnet Java Basics - Anfänger-Themen 4
D JTable wird nicht richtig abgefüllt. Java Basics - Anfänger-Themen 2
C JTable: ColumnHeader wird nicht angezeigt Java Basics - Anfänger-Themen 4
D Falsche Zeile wird in JTable gelöscht Java Basics - Anfänger-Themen 6
C Klassen JTable wird ohne Header aufgebaut Java Basics - Anfänger-Themen 6
J ArrayList wird in JTable falsch angezeigt Java Basics - Anfänger-Themen 0
G jtable listener wenn zeile markiert wird Java Basics - Anfänger-Themen 6
C verify() wird doppelt aufgerufen (JTable + InputVerifier) Java Basics - Anfänger-Themen 8
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
richis-fragen JTable sowohl Spaltennamen wie auch Spaltenbeschriftungen Java Basics - Anfänger-Themen 7
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
G JTable Listselectionlistener friert das Programm ein Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
J Zelleninhalt einer Jtable löschen Java Basics - Anfänger-Themen 2
E JTable einzelne Zelle färben Java Basics - Anfänger-Themen 2
thobren jtable arraylist Java Basics - Anfänger-Themen 12
thobren JTable Icon Java Basics - Anfänger-Themen 1
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
G JTable, Zeile auswählen und Ergebnis an Schaltfläche übergeben Java Basics - Anfänger-Themen 4
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
J JTable Spalteninhalt löschen Java Basics - Anfänger-Themen 1
B jTable Spalte summieren Java Basics - Anfänger-Themen 7
N JTable auslesen Java Basics - Anfänger-Themen 6
O JTable in Excel mit Farben Java Basics - Anfänger-Themen 8
O Kommentar auf JTable Zelle Java Basics - Anfänger-Themen 2
M Jtable Reenderer Java Basics - Anfänger-Themen 0
O Popoup Menü im JTable richtig anzeigen Java Basics - Anfänger-Themen 6
M Jtable änderung updaten Java Basics - Anfänger-Themen 2
O JTable Suchfunktion Java Basics - Anfänger-Themen 2
M jTable bekommt null Java Basics - Anfänger-Themen 1
M JTable an andere Klasse übergeben Java Basics - Anfänger-Themen 2
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
M Klasse in JTable einfügen Java Basics - Anfänger-Themen 7
S JTable Java Basics - Anfänger-Themen 16
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L JTable Tagebuch Spaltenhöhe verändern Java Basics - Anfänger-Themen 3
S JTable - Filter an anderen Colums Java Basics - Anfänger-Themen 2
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
C Best Practice JTable in MVC Pattern Java Basics - Anfänger-Themen 7
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
A zykl. Aktualisierne JTable Java Basics - Anfänger-Themen 9
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
V JTable welcher Listener ? Java Basics - Anfänger-Themen 7
D MySQL Abfrage in JTable speichern Java Basics - Anfänger-Themen 43
D JTable Zeilen löschen Java Basics - Anfänger-Themen 5
K (JTable) Text einer Zelle auf der linken Seite kürzel Java Basics - Anfänger-Themen 2
B Kniffel JTable Java Basics - Anfänger-Themen 5
N JTable flackert Java Basics - Anfänger-Themen 8
T JTable Daten aus txt datei Java Basics - Anfänger-Themen 3
J Eintragen von Personen in JTable Java Basics - Anfänger-Themen 4
X JTable mit grünen und roten Punkten Java Basics - Anfänger-Themen 2
LexeB4F DEL --> JTable Zelleninhalt Java Basics - Anfänger-Themen 3
R JTable Auslesen Java Basics - Anfänger-Themen 1
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
J JTable Wert gleich überschreiben Java Basics - Anfänger-Themen 6
S Zeile entfernen aus JTable Java Basics - Anfänger-Themen 15
S JTable clonen Java Basics - Anfänger-Themen 5
H Best Practice PDF JTable Java Basics - Anfänger-Themen 4
S In JTable Zeile selektieren mit Mausklick Java Basics - Anfänger-Themen 16
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
M JTable mit XML datei befüllen Java Basics - Anfänger-Themen 1
F Zeile bei JTable hinzufügen Java Basics - Anfänger-Themen 6
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
M [JTable] getValue throws ArrayOutOfBoundException Java Basics - Anfänger-Themen 1
B JTable - Highlighter ??? Java Basics - Anfänger-Themen 3
S JTable LinkedList <Objekt> befüllen Java Basics - Anfänger-Themen 1
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
O JScrollPane zu gross für JTable Java Basics - Anfänger-Themen 2
L JTable Row selected -> fireTableDataChange do nothing. Java Basics - Anfänger-Themen 3
E JTable + TableModel updaten? Java Basics - Anfänger-Themen 1
O java.lang.IndexOutOfBoundsException JTable autoSort Java Basics - Anfänger-Themen 5
F JTable adding Row Java Basics - Anfänger-Themen 5
P jTable getColumnClass, mit unterschiedlichen Klassen in einer Column? Java Basics - Anfänger-Themen 5
M Eingabe in JTable bei Eingabe korrigieren Java Basics - Anfänger-Themen 2
Z jtable problem (das tausendste??) Java Basics - Anfänger-Themen 12
J JTable Java Basics - Anfänger-Themen 7
T JTable Java Basics - Anfänger-Themen 2
T JTable einzelne Zeilen löschen Java Basics - Anfänger-Themen 3
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
Uzi21 jTable / Inhalt speichern Java Basics - Anfänger-Themen 2
M Problem mit JTable und Model Java Basics - Anfänger-Themen 3
F Methoden JTable + 2 For-Schleifen Java Basics - Anfänger-Themen 4
C jtextfield und jtable Java Basics - Anfänger-Themen 34
X JTable mit Inhalten aus JTextField o.ä. füllen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben