Auch JTable - checkboxes

Spin

Top Contributor
Java:
public class AdminCocktailAnsicht extends AbstractTableModel implements TableModelListener{

    Cocktailliste clist;
    private Vector<Object> list = new Vector<Object>();

    public Vector<Object> fill() {

        Boolean bool = false;
        for (int i = 0; i < clist.sizeCocktails(); i++) {
            list.add(bool);
        }
        return list;
    }

    public AdminCocktailAnsicht() {
        /* Cocktailiste holen*/

        DBSchnittstelle db = new DBSchnittstelle();
        try {
            clist = db.ladeCocktails();
        } catch (SQLException e) {
        } catch (IOException e) {
        }
        this.fill();
    }

    public int getRowCount() {
        return clist.sizeCocktails();
    }

    public int getColumnCount() {
        return 4;
    }

    public Object getValueAt(int row, int col) {
        Cocktail c = clist.getCocktail(row);
        switch (col) {
            case 0:
                return c.getName();
            case 1:
                return c.getKategorie();
            case 2:
                return c.getBeschreibung();
            case 3:
                return list.get(row);
        }
        return null;
    }

    @Override
    public String getColumnName(int col) {
        switch (col) {
            case 0:
                return "Name";
            case 1:
                return "Kategorie";
            case 2:
                return "Beschreibung";
            case 3:
                return "Sichtbarkeit";
        }
        return null;

    }

    public Class getColumnClass(int column) {
        try {
            if (column == 3) {
                return Class.forName("java.lang.Boolean");
            }
            return Class.forName("java.lang.Object");
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
            return null;
        }
    }

    public void tableChanged(TableModelEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public boolean isCellEditable(int row, int column) {
        switch(row)
        {
            case 3: return true;
        }
        return false;

    }


Hallo hier mal mein schönes Model. Es geht alles wunderbar, jedoch frage ich mich , warum ich die letzte Spalte nicht edittieren kann?

Ich will doch einfach nur die checkboxen an und aus machen können und dann mit meinen TableListener die Änderung abfangen . weiß einer den fehler , danke 🙂
 
Java:
public class AdminCocktailAnsicht extends AbstractTableModel implements TableModelListener{

    Cocktailliste clist;
    private Vector<Object> list = new Vector<Object>();

    public Vector<Object> fill() {

        Boolean bool = false;
        for (int i = 0; i < clist.sizeCocktails(); i++) {
            list.add(bool);
        }
        return list;
    }

    public AdminCocktailAnsicht() {
        /* Cocktailiste holen*/

        DBSchnittstelle db = new DBSchnittstelle();
        try {
            clist = db.ladeCocktails();
        } catch (SQLException e) {
        } catch (IOException e) {
        }
        this.fill();
    }

    public int getRowCount() {
        return clist.sizeCocktails();
    }

    public int getColumnCount() {
        return 4;
    }

    public Object getValueAt(int row, int col) {
        Cocktail c = clist.getCocktail(row);
        switch (col) {
            case 0:
                return c.getName();
            case 1:
                return c.getKategorie();
            case 2:
                return c.getBeschreibung();
            case 3:
                return list.get(row);
        }
        return null;
    }

    @Override
    public String getColumnName(int col) {
        switch (col) {
            case 0:
                return "Name";
            case 1:
                return "Kategorie";
            case 2:
                return "Beschreibung";
            case 3:
                return "Sichtbarkeit";
        }
        return null;

    }

    public Class getColumnClass(int column) {
        try {
            if (column == 3) {
                return Class.forName("java.lang.Boolean");
            }
            return Class.forName("java.lang.Object");
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
            return null;
        }
    }

    public void tableChanged(TableModelEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public boolean isCellEditable(int row, int column) {
        switch(row)
        {
            case 3: return true;
        }
        return false;

    }


Hallo hier mal mein schönes Model. Es geht alles wunderbar, jedoch frage ich mich , warum ich die letzte Spalte nicht edittieren kann?

Ich will doch einfach nur die checkboxen an und aus machen können und dann mit meinen TableListener die Änderung abfangen . weiß einer den fehler , danke 🙂

Ich würde mal das interface List benutzen
Java:
 private List<Object> list = new Vector<Object>();

zu deiner Frage es könnte sein dass du vielleicht die Methode noch in der Tabelle überschreiben musst oder du dort gesagt hast dass man Zeilen nicht edtieren darf...

EDIT: Kannst ja auch mal debuggen ob überhaupt mal true zurück geliefert wird...
 
Zuletzt bearbeitet von einem Moderator:
Java:
    @Override
    public boolean isCellEditable(int row, int column) {
        switch(row)
        {
            case 3: return true;
        }
        return false;
 
    }

Hier steht
Code:
switch (row)
...vielleicht meinst du
Code:
column
? 🙂
 
Moin, leider liegts an keinen von beiden vorgeschlangenden Problemen.
Ich kann die Textfelder ohne Probleme editieren , aber die Checkbox nicht.

Vielleicht liegt es daran , dass ich einträge in der list nicht ändern darf MH.
Wie kann ich dass denn anders machen , also anstatt eine list mit true werten übergeben.

Eigentlich will ich Boolean Objekte die man denn per mausklick ändern kann , gruß
 
In Deinem Model fehlt noch eine Methode.
Du musst in noch
Code:
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
implementieren.
 
Java:
public void setValueAt(Object aValue, int row, int col) {
        if (col == 3) {
            list.set(row, aValue);
        }
    }

Meinst du so?

Mit setValueAt bekomme ich den wert oder setze ich ihn?
Weil ich ein objekt bekomme , dass irrtiert mich , danke 🙂
:toll:
es funktioniert . danke🙂
 
Zuletzt bearbeitet:
Moin, leider liegts an keinen von beiden vorgeschlangenden Problemen.
Ich kann die Textfelder ohne Probleme editieren , aber die Checkbox nicht.

Vielleicht liegt es daran , dass ich einträge in der list nicht ändern darf MH.
Wie kann ich dass denn anders machen , also anstatt eine list mit true werten übergeben.

Eigentlich will ich Boolean Objekte die man denn per mausklick ändern kann , gruß

Wie du kannst die die Textfelder ohne Probleme editieren??? dann bringt die methode gar nichts ^^...
 
Java:
public void setValueAt(Object aValue, int row, int col) {
        if (col == 3) {
            list.set(row, aValue);
        }
    }

Meinst du so?
Da fehlt noch ein Event. Das Modell muss allen Zuhörern Bescheid geben, wenn es sich ändert.

Nur am Rande: Bitte nicht sowas machen: [c]Class.forName("java.lang.Boolean");[/c] Statt dessen einfach [c]Boolean.class[/c]. Das spart die deklarierte Exception, Zeit, Code und Augenkrebs. 🙂

Ebenius
 

Zurück
Oben