jTable getColumnClass, mit unterschiedlichen Klassen in einer Column?

Paul279

Aktives Mitglied
Hallo Community
ich habe eine JTable, wo ich in einer Column zwei verschiedene Klassen haben möchte.
Einmal String und einmal Boolean.

Ist dies überhaupt möglich?
Wenn ja, könntet ihr mir bitte die Richtung weisen, bekomme es einfach nicht hin

danke sehr
 
Naja, JTable ist letztendlich nur die View. Du spricht vermutlich über das dahinter stehende Datenmodell. Wie dies dann konkret in der Oberfläche dargestellt wird, musst du ja entsprechend selbst definieren.
Kurz gesagt: wenn du als Datentyp für diese Spalte "Object" wählst, sollte das kein Problem sein.
 
Zuletzt bearbeitet:
ich habe eine JTable, wo ich in einer Column zwei verschiedene Klassen haben möchte.
Einmal String und einmal Boolean.

Entweder du machst es mit Generics oder du machst es dynamisch indem du ein Objekt namens StringOrBoolean schreibst mit einem Pedicate, mit dessen Hilfe geprüft werden kann, ob es sich in dem konkreten Fall jetzt um einen String oder Boolean handelt, und mit zwei Getter-Methoden, die jeweils einen String oder einen Boolean zurück liefern.
 
Hallo Mitstreiter,
danke für eure Posts, aber ich werde mich jetzt etwas klarer ausdrücken:

hier.JPG - directupload.net - keine Ahnung warum es mit dem TAG nicht funktioniert

Und ich möchte gerne dass die ersten zwei Zeilen leer sind und alle anderen jCheckboxen sind. Jetzt steht leider nur true und false dort. Ich möchte aber gerne dass er das mit jCheckboxen anzeigt.

Ich kenn mich mit jTable leider noch nicht sehr gut aus, aber habe im Internet eine Anleitung gefunden wie man verschiedene Klassen in einer Column haben kann: [URL="http://www.javaworld.com/article/2077465/learn-java/java-tip-102--add-multiple-jtable-cell-editors-per-column.html"]Von hier habe ich den Renderer[/URL]

So wenn ich dieses Beispiel bei mir einbaue, zeigt er mir zwar die JComboboxen an (ich brauche aber leider keine JComboboxen) sondern brauche jCheckboxen.

Könnte mir jemand sagen wie ich das bewerkstellige. Danke sehr. Darunter mal mein Code:

[CODE]JTableX jTableXmeins = new JTableX();
jTableXmeins.setModel(controller.getModel().getDtmStatistikRunde1_Faktoren());
RowEditorModel rm = new RowEditorModel();
// tell the JTableX which RowEditorModel we are using
jTableXmeins.setRowEditorModel(rm);
// create a new jTextField and DefaultCellEditor to use in the
JTextField jTextFieldLeer = new JTextField();
DefaultCellEditor ed = new DefaultCellEditor(jTextFieldLeer);
// tell the RowEditorModel to use ed for row 1 and 2
rm.addEditorForRow(1,ed);
rm.addEditorForRow(2,ed);
// create a new jCheckbox and editor for a different row
JCheckBox cb = new JCheckBox();
ed = new DefaultCellEditor(cb);
// inform the RowEditorMode of the situation
rm.addEditorForRow(3,ed);
rm.addEditorForRow(4,ed);
rm.addEditorForRow(5,ed);
jScrollPane5.setViewportView(jTableXmeins);[/CODE]
 
Zuletzt bearbeitet:
Leider kann ich meinen Beitrag davor nicht mehr editieren,
vergesst das darüber! Ich habe gerade gelernt was der Unterschied zwischen Editor und Renderer ist!
Ich brauche einen Renderer und habe einen Editor geschrieben.

Nungut, leider will es noch immer nicht funktionieren

Code:
jTable.setDefaultRenderer(Object.class, myRenderer);

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        if(column == anzahlColumns && row > 2){
            return super.getTableCellRendererComponent(table, (boolean)value, isSelected, hasFocus, row, column);
        }

        return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); //To change body of generated methods, choose Tools | Templates.
    }

Er geht auch rein, doch würde ich jetzt gern in der IF einen Default Renderer zurückgeben der BOOLEAN erkennt.
Habe versucht im Code einfach vor value (boolean) zu schreiben, funktioniert leider immer noch nicht.

Könnte mir jemand bitte sagen wie ich das schreiben muss, dass er die Zelle als Boolean rendert?
Danke sehr
 

Zurück
Oben