Swing Verzweifle: JTable funktioniert nicht ganz wie es soll...

Status
Nicht offen für weitere Antworten.

Roumeo

Mitglied
Hallo Leute,

ich möchte mit einem Programm Daten aus Dateien auslesen und diese in eine Tablle sortiert reinschreiben. Das funktioniert bisher wunderbar, nur gibt es auch mal unterschiedlich große Dateien, so brauche ich also eine dynamisch erweiterbare Tabelle.

Was nicht funktioniert:
Der Befehl model.addRow funktioniert nicht:

Fehlermeldung: Cannot find symbol

Wie das Programm aussieht:
Ich habe ein jtable objekt angelegt. Diesem habe ich das DefaultTableModel zugeordnet sowie eine startgröße.
Will ich aber nun mit einer Funktion eine Zeile in der Tabelle hinzufügen kommt der besagte Fehler...

Danke schonmal für die Hilfe

Minimierter Code:

Java:
import javax.swing.table.DefaultTableModel;

....

private JTable jTable1 = new JTable(0,4);

....
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
 jTable1.setModel(model);
 jTable1.setBounds(24, 120, 697, 353);
 jTable1.setFont(new Font("MS Sans Serif", Font.BOLD, 17));
 jTable1.setForeground(Color.GRAY);
 jTable1.setRowHeight(25);
 jTable1.setVisible(false);
 cp.add(jTable1 );


....
public void configOpen(String Path) throws IOException {
     File fpath = new File(Path);
     BufferedReader meinReader = new BufferedReader(new FileReader(fpath));
     String configString = "";
     int rowCount = 0;
     int i = 0;
     int j = 0;
     while((configString = meinReader.readLine())!= null) {
       rowCount = rowCount + 1;
       model.addRow();
       j = 0;
       String[] split = configString.split(";;;");
       String Pfad = split[0];
       String Anzahlstr = split[1];
       String Art = split[2];
       String Methode = split[3];
       jTable1.setValueAt(Pfad,i,j);
       j++;
       jTable1.setValueAt(Anzahlstr,i,j);
       j++;
       jTable1.setValueAt(Art,i,j);
       j++;
       jTable1.setValueAt(Methode,i,j);
       jTable1.setVisible(true);
       jButton4.setVisible(true);
       jTextField1.setText(Path);
       if(Art.equals("del")) {
         jRadioButton1.setSelected(true);
         jRadioButton2.setSelected(false);
       }else if(Art.equals("a")) {
         jRadioButton2.setSelected(true);
         jRadioButton1.setSelected(false);
       }
       int Anzahl = Integer.parseInt(Anzahlstr);
       i++;
     }
  }
 
Sry:

Wenn ich den Code so lasse kommt folgende:

cannot find symbol
symbol: variable model
location: class test


Habe mal anstatt:

Java:
model.addRow();

Java:
DefaultTableModel.addRow();

probiert, da kommt dann folgende Fehlermeldung:

cannot find symbol
symbol: addRow()
location: class javax.swing.table.DefaultTableModel

Ich bin noch relativ frisch in Java und verstehe nicht, warum es so schwer ist während der Laufzeit eine Zeile der Tabelle hinzuzufügen...

Wie sollte es denn richtig heißen?
 
Du solltest dir ein Anfängerbuchschnappen und dich in Objekt-Orientierte-Programmierung einlesen. Außerdem lernen mit der API-Dokumentation zu arbeiten. Wie es richtig heißt, habe ich dir doch in zwei Links geschickt. Wenn du eine Zeile hinzufügst, gibst du auch gleich den Inhalt mit an.

DefaultTableModel.addRow();

kann nicht funktionieren, da du einem Objekt die Zeile hinzufügen möchtest, und nicht der Klasse. Die Klasse unterstützt diese Methode natürlich auch nicht - nur Objekte davon.

model.addRow();

funktioniert nicht, da es die Methode "addRow" in dieser Form wie gesagt nicht gibt. Außerdem hast du das model vermutlich lokal deklariert, möchtest aber aus einer anderen Methode darauf zugreifen. Somit ist das außerhalb des Gültigkeitsbereichs der Variable, was in keiner Programmiersprache funktionieren wird.
 
Definier mir doch bitte, was du mit damit meinst, dass es sie in dieser Art nicht gibt. In der API steht sie doch genauso drin?!
Wie man sie anwendet ist dort allerdings nicht beschrieben...

Wie kann man denn das Object model in Java global definieren damit die anderen Methoden darauf zugreifen können? Soweit ich weiß, gibt es keine globalen Variablen in java?!
 
Definier mir doch bitte, was du mit damit meinst, dass es sie in dieser Art nicht gibt. In der API steht sie doch genauso drin?!
Wie man sie anwendet ist dort allerdings nicht beschrieben...

Wie kann man denn das Object model in Java global definieren damit die anderen Methoden darauf zugreifen können? Soweit ich weiß, gibt es keine globalen Variablen in java?!

In der API steht:

Code:
 void 	addRow(Object[] rowData)
          Adds a row to the end of the model.
 void 	addRow(Vector rowData)
          Adds a row to the end of the model.{

addRow mit jeweils EINEM PARAMETER und nicht parameterlos
 
Definier mir doch bitte, was du mit damit meinst, dass es sie in dieser Art nicht gibt. In der API steht sie doch genauso drin?!
Wie man sie anwendet ist dort allerdings nicht beschrieben...

1. In der API hat die Methode Parameter, folglich musst auch du der Methode etwas geben (den Inhalt der neuen Row): "model.addRow( derInhalt )" wobei "derInhalt" ein Object-Array sein muss.

2. Wie man sie anwendet... es steht genau was sie tut und was die Parameter bedeuten, was brauchst du mehr?
 
Ich kann auch lesen, man beachte aber bitte den zweiten Satz:

Adds a row to the end of the model. The new row will contain null values unless rowData is specified. Notification of the row being added will be generated.

Also liegt es wohl nicht daran.
 
Ich kann auch lesen, man beachte aber bitte den zweiten Satz:

Adds a row to the end of the model. The new row will contain null values unless rowData is specified. Notification of the row being added will be generated.

Also liegt es wohl nicht daran.

Ziemlich lernresistent ....
Wenn du keine Hilfe annehmen wilslt, oder mal mitdenkst, wird das nix.

du benutzt addRow() OHNE Parameter!!! die Funktion braucht aber einen ....
 
Wenn ich mir den Quellcode von DefaultTableModel angucke, macht diese Aussage der API mässig Sinn. Das könnte bedeuten, dass das Argument wird nicht auf null getestet, und später kann es zu einer NullPointerException kommen.

Das ändert aber nichts an der Tatsache, dass der Methode ein Argument übergeben werden muss ;-) . So läuft das nunmal in Java, jeder Parameter muss mit einem Argument gefüllt werden, sonst geht es nicht.
 
Sry, hab heute eine lange Leitung, habs nun auch gecheckt -.-.

War der Meinung es schon mit Parameter getestet zu haben und es hätte nicht funktioniert.. Aber egal.

Das funzt jetzt euch sei danke.

Vielen dank für die Hilfe.

Hat vll. noch jemand einen Tipp, wie ich auf das Model von der Methode aus zugreifen kann? Weil dort ensteht das eigentliche Event, wann die Methode ausgeführt werden soll.
 
Kenn deine Klassenstruktur nicht, aber evtl. könntest du das Model als Attribut eintragen und so abfragen, oder über JTable#getModel erhalten.
 
Über jTable.getModel ging es leider nicht.

Folgendes hat aber funktioniert:

- Bei Methodenaufruf das model mitübergeben
- Im Methodenkopf den Übergabeparameter: TableDefaultModel model
mit übergeben

danach hat es funktioniert.

Vielen dank euch allen für die Hilfe 🙂
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben