Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen

Times

Bekanntes Mitglied
Hallo,

habe ein kleines Problemchen mit meiner JTable welche in der letzten Spalte einen Button zum löschen beeinhaltet:

Wenn ich den Button drücke wird die Zeile gelöscht. Der Satz verschwindet aus der Tabelle, wie gewünscht, aber in der Zeile die in diese Zeile rutscht hat einen unsichtbaren Button!
Nachdem ich den Fokus von der Spalte entferne, sprich den Fokus zB auf die vorherige Spalte setze, ist wieder alles in Ordnung.

Habe mal rein faktisch ausprobiert ob es gehen würde wenn ich nach dem löschen alle FocusLost Methoden von allen vorhandenen FocusListeners auslöse, aber das hat das Problem nicht behoben.

So sieht die Tabelle normal aus:
I8vMUC6.png


So sieht es aus nachdem ich eine Zeile herausgelöscht habe:
yTE5RfE.png


Code:

TableCellEditor für den Button:
Code:
private class ButtonEditor extends AbstractCellEditor implements TableCellEditor {
        @Override
        public Component getTableCellEditorComponent(JTable table,Object value,boolean isSelected, int row, int column) {
            return DTable.this.btDelete;
        }

        @Override
        public boolean isCellEditable(EventObject anEvent) {
            if(anEvent instanceof MouseEvent) {
                return ((MouseEvent)anEvent).getClickCount() >= 1;
            }
            return true;
        }

        @Override
        public Object getCellEditorValue() {
            return DTable.this.btDelete;
        }
    }

TableCellRenderer für den Button:
Code:
private class TableCellRenderer extends DefaultTableCellRenderer{
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            if (column == DTable.this.indexTableColumnDelete){
                return DTable.this.btDelete;
            }else{
                Component cmp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                if (table.isEnabled()){
                    if (getEditingRow() != row){
                        cmp.setBackground(GUI.COLOR_ELEMENT_BACKGROUND_MANDATORY);
                        cmp.setForeground(GUI.COLOR_ELEMENT_FOREGROUND_ENABLED);
                    }
                }
                return cmp;
            }
        }
    }

Code zum entfernen der Zeile:
Code:
((DefaultTableModel)DTable.this.getModel()).removeRow(row);

Hoffe auf Eure Hilfe 🙂

Danke, Grüße
Times

Edit: Die Bilder sollten nun auch für euch sichtbar sein :*
 
Spontan würde ich darauf tippen, dass du die Buttons absolut gesetzt hast. Das bedeutet, wenn du die Zeile drei Löschst dann Löscher du auch Button 3 ... Du musst den Button nach den Löschen an der stelle neu erstellen... Ist aber nur eine Vermutung...
 

Zurück
Oben