Tabelle mit Jtable und TableMode erstellen



  • Hallo,

    ich habe eine Frage zu JTable und MyTableModel.

    Hier mal ein Programm, dass nur JTable verwendet:

    public static final int MAX_ROWS = 100;
    public static final int MAX_COLS = 6;
    
    private String[][] data = new String[MAX_ROWS][MAX_COLS];
    private String[] columnNames = new String[MAX_COLS];
    
    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);
    }
    
    for (int i = 0; i < MAX_COLS; ++i) {
    columnNames[i] = new String("Spalte " + (i + 1));
    }
    myTable = new JTable(data, columnNames);
    JScrollPane scrollpane = new JScrollPane(myTable);
    contentPane.add(scrollpane);
    

    Natürlich fehlen hier jetzt die Klassen, die das Fenster etc. generieren, aber das ist hier nicht wichtig. Aufjedenfall verwendet dies nur JTable, d.h. man übergibt ein 2-dimensionales Array, das man weiß wo die Daten hingehören und dann noch ein 1-dimensionales Array für die Spaltennamen.

    Kurze Frage zum 2-dimensionalen Array: Also in i und j stehen immer die selben Daten oder? Wenn man die JTable benutzt müssen ja immer in i und j die selben daten stehen? Also: i=5, j=5 --> stehen dieselben daten usw.
    Stimmts?

    Hier das 2te Programm, das TableModel verwendet:

    MyTableModel.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 MyTableModel(int rows, int cols) {
    		row_cnt = rows;
    		col_cnt = cols;
    	}
    
    	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 Integer.toString(row * col_cnt + col);
    	}
    
    }
    

    MainFrame.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= 100;
      private JTable myTable;
      public MainFrame() {
        try {
          setDefaultCloseOperation(EXIT_ON_CLOSE);
          FrameInit();
        }
        catch (Exception exception) {
          exception.printStackTrace();
        }
    
        myTable= new JTable (new MyTableModel(MAX_ROWS,MAX_COLS));
        JScrollPane scrollpane = new JScrollPane(myTable);
        contentPane.add(scrollpane);
      }
    
      private void FrameInit() throws Exception {
        contentPane = (JPanel) getContentPane();
        contentPane.setLayout(new BorderLayout());
        setSize(new Dimension(400, 300));
        setTitle("Frame Title");
      }
    }
    

    Hier fehlt auch wieder die Fenster-generierung, was ja egal ist.

    Ich verstehe nicht was TableMode genau macht. MyTableModel ist ja eine selbstgenerierte Klasse. Aber "extends AbstractTableModel" verleiht dem ganzen erst warschl. die "spezielle" Fähigkeit, oder?

    Am Ende sollte doch dieselbe Tabelle rauskommen, wie im ersten Programm, richtig? Aber tut es nicht, also fehlt irgendwas.

    Z.b. die get-funktionen in MyTableModel muss ich doch auch aufrufen oder? Kann mir einer das TableModel ev. näher erklären bitte? Hab auch leider im Inet nichts nützliches gefunden.

    mfg

    java_beginner


Anmelden zum Antworten