Naja, ich verstehe noch nicht so wirklich, wie nun so ein TableModel genau funktioniert. Schauen wir uns doch mal bei meinem Post #1, das 2te Programm an. Hier wird ja dieses ATM verwendet.
ATM ist also eine Klasse, von der man ableiten kann. Diese Klasse enthält schon vorgegebene, aber abstrakte Methoden. Abstrakte Methoden sind einfach vorgegeben Methoden ohne Parameter etc., also einfach leer.
Und darum muss ich eine eigene Klasse machen und die Methoden von ATM erben. Und diese Methoden kann ich dann wie ich will verändert, also x parameter hinzufügen z.B.
Stimmt das?
Aber ich könnte ja theretisch einfach so eine Klasse erstellen(ohne diese von ATM abzuleiten) und einfach methoden machen. Naja gut das bringt dann wieder nix, da die Methoden, dann net mit meinem JTable verbunden sind.
Hab ich recht?
Hm naja vielleicht kann mir jemand bitte das noch etwas genauer erklären, wie das nun genau funktioniert. Wie funktioniert der Vorgang z.b. mit den Daten in die Tabelle einfügen?
Z.b. beim getValueAT, woher nimmt er jetzt nun die Daten? getValueAt heißt ja er soll die Daten von zeile 3 und spalte 4 z.b. holen, aber von wo soll er die holen, wenn noch keine Tabelle da ist?
Vielleicht erübrigt sich die Frage, wenn ich die Fragen oben beantwortet werden.
Ein 3tes Beispiel:
MainFrame.java:
Java:
package JTable_Demo;
import java.awt.*;
import javax.swing.*;
public class MainFrame extends JFrame {
private JPanel contentPane;
public static final int MAX_ROWS= 100;
public static final int MAX_COLS= 6;
private JTable myTable;
public String[][] data = new String[MAX_ROWS][MAX_COLS];
public MainFrame() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
FrameInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
for (int i = 0; i < MAX_ROWS; ++i) {
for (int j = 0; j < MAX_COLS; ++j)
data[i][j] = Integer.toString(i * MAX_COLS + j);
}
myTable= new JTable (new MyTableModel(MAX_ROWS, MAX_COLS, data));
JScrollPane scrollpane = new JScrollPane(myTable);
contentPane.add(scrollpane);
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void FrameInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(new BorderLayout());
setSize(new Dimension(400, 300));
setTitle("Frame Title");
}
}
MyTableModel.java:
Java:
package JTable_Demo;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
public class MyTableModel extends AbstractTableModel {
int row_cnt, col_cnt;
public String[][] data = new String[row_cnt][col_cnt];
String data1 [][];
public MyTableModel(int rows, int cols, String data[] []) {
row_cnt = rows;
col_cnt = cols;
data1 = data;
}
public int getColumnCount() {
return col_cnt;
}
public int getRowCount() {
return row_cnt;
}
public String getColumnName(int colnum) {
return new String("Spalte " + (colnum + 1));
}
public Object getValueAt(int row, int col) {
return data1[row][col];
}
}
Der Einzige Unterschied vom dem hier zum 2ten Beispiel in Post #1 ist, dass bei getValueAt ein Array verwendet wird, dass im MainFrame erzeugt wird.
Aber was macht das für einen Unterschied? Ausgabe ist ja gleich. Aber die Rechnung in Bsp2 bei getValueAt ist mir noch nicht ganz klar.