Swing DefaultTableModel, Checkbox in Spalte

b0312

Mitglied
Hallo Community,
ich habe schon auf mehrere Arten versucht eine Checkbox in meine Spalte von der Tabelle zu implementieren. Leider ist es mir nicht gelungen.Das Java-Tutorial (JTable) hat mir leider auch nicht weitergeholfen, zahlreiche andere Forumthreads brachten mich auch nicht zum Ziel.

Hier ist mein Code:

Java:
                public DefaultTableModel drawTable() {
                JTable tblVorgang = new javax.swing.JTable();
                tblDataModel = new DefaultTableModel();

                Vector clmHeader = new Vector();
                Vector dataVector = new Vector();
                int clmCnt = 0;
                clmHeader.addElement("Status");             clmCnt++; //Das ist die Spaltenüberschrift
                clmHeader.addElement("Spalte2");        clmCnt++;
                clmHeader.addElement("Spalte3");        clmCnt++;
                clmHeader.addElement("Spalte4");               clmCnt++;
                clmHeader.addElement("Spalte5");            clmCnt++;
                clmHeader.addElement("Spalte6");            clmCnt++;
                clmHeader.addElement("Spalte7");       clmCnt++;
                clmHeader.addElement("Spalte8");         clmCnt++;
                clmHeader.addElement("Spalte9");           clmCnt++;
                clmHeader.addElement("Spalte10");              clmCnt++;
                clmHeader.addElement("Spalte11");               clmCnt++;
                //clmHeader.addElement("Spalte12");        clmCnt++;
                //clmHeader.addElement("Spalte13");   clmCnt++;
                clmHeader.addElement("SM");                 clmCnt++;
                clmHeader.addElement("GM");                 clmCnt++;
                clmHeader.addElement("OM");                 clmCnt++;
                clmHeader.addElement("NA");                 clmCnt++;
                clmHeader.addElement("AS");                 clmCnt++;
                
                while(rs.next()){
                    //Hier sind die Daten der Datenbank, hiermit wird die Tabelle aufgefüllt
                    Vector rowVector = new Vector();
                    for(int i = 1; i <= clmCnt; i++){
                        if (i == 1){
                            // Abfrage ob es die 1.Zeile ist
                            // Hier soll dann die Checkbox kommen
                            rowVector.addElement(java.lang.Boolean.class); 
                        }
                        rowVector.addElement(rs.getString(i));
                    }
                    dataVector.addElement(rowVector);
                }

                tblDataModel.setDataVector(dataVector,clmHeader);

                return tblDataModel;
    }

Das ist mein TableModel .. das übergebe ich an eine andere Klasse wo die grafische Benutzeroberfläche ist. Die Tabelle verwendet dann dieses TableModel
 
Zuletzt bearbeitet:
Vielen dank für die schnelle Antwort XHelp,
wie überschreibe ich die Klasse getColumnClass, ich sehe jetzt in meinem Programm überhaupt nicht wo diese Klasse verwendet wird?
 
Das ist keine Klasse, sondern eine Methode von dem TableModel. Du kannst also ein eigenes Model erstellen, welches von DefaultTableModel erbt. In dem Nachtrag ist ein Link auf FAQ Artikel bezüglich Tables, da gibt es auch ganz viele andere Teile, die dir sicherlich weitere Informationen geben
 
Hallo nochmal, also ich habe es jetzt probiert mit dieser Klasse, lediglich bekomme ich eine Fehlermeldung und stehe auf der Leitung. Bitte um hilfe

Java:
// Folgende FEHLERMELDUNG:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.Boolean




import java.lang.Object;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author Borislav
 */
public class modifyModel extends AbstractTableModel {
    private Object[] dataObjects;
    private Object[] columnObjects;
    private Class[] classes;
// rs ist das ResultSet von meiner mySQL Datenbank
    public modifyModel(ResultSet rs) throws SQLException{
        int n = 0;
        dataObjects = new Object[100000];
        while(rs.next()){
// columnObjects sind die einzelnen Datenfelder eines Datensatzes (insgesamt 16)
            columnObjects = new Object[17];
            for(int i = 1 ; i <= 16; i++){
                if (i == 1){
                    columnObjects[i] = Boolean.valueOf(false);
                }
                columnObjects[i] = rs.getString(i);
            }
// dataObjects sind dann die einzelnen Spalten
            dataObjects[n] = columnObjects;
            n++;
        }

        classes = new Class[]{
            Boolean.class,
            String.class,
            String.class,
            String.class,
            String.class,
            String.class,
            String.class,
            String.class,
            String.class,
            String.class,
            String.class,
            String.class,
            String.class,
            String.class,
            String.class,
            String.class
        };
    }

    public int getRowCount() {
        return dataObjects.length;
    }

    public int getColumnCount() {
        return columnObjects.length;
    }

    public String getColumnName(int column) {
        return getColumnClass( column ).getName();
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        return classes[columnIndex];
    }

    public Class getColumnClass(int columnIndex) {
        return classes[columnIndex];
    }


}


Möglicherweise wird es probleme bei ColumnObjects & DataObjects geben ?
Ich habe eine alte methode gehabt, dort verwendete ich Vektoren.
Habe es dann bei den Objekten gleich aufgebaut wie bei den Vektoren

Danke im Voraus!
greeTz B0312

EDIT:

Habe es doch noch selbstständig geschafft
2-Dimensionales Objekt und ein bisschen fehler ausbessern, hier die Lösung:

[Java]
package fileimport;

import java.lang.Object;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.table.AbstractTableModel;

/**
*
* @author Borislav
*/
public class modifyModel extends AbstractTableModel {
private Object[][] dataObjects;
private Class[] classes;
int n = 0;
public modifyModel(ResultSet rs) throws SQLException{

dataObjects = new Object[100000][16];
while(rs.next()){
//rowObjects = new Object[16];
for(int i = 1 ; i <= 16; i++){
int y = i-1;
if (i == 1){
dataObjects[n][y] = Boolean.valueOf(false);
}
else{
if (i == 16){
break;
}
dataObjects[n][y] = rs.getString(i);
}
}
n++;
}

classes = new Class[]{
Boolean.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
};
}
public int getRowCount() {
return n;
}
public int getColumnCount() {
return 16;
}

public String getColumnName(int column) {
return getColumnClass( column ).getName();
}

public Object getValueAt(int rowIndex, int columnIndex) {
return dataObjects[rowIndex][columnIndex];
}

public Class getColumnClass(int columnIndex) {
return classes[columnIndex];
}


}
[/Java]
 
Zuletzt bearbeitet:

Zurück
Oben