JTable, Spalte nicht verschiebbar

benhaze

Mitglied Platinum
Hallo Freunde der Entwicklung!
Vielleicht kann mir jemand helfen?

Meine JTable hat 5 Spalten.
Alle Spalten lassen sich untereinander verschieben.

Wie stelle ich es nun an, das sich die erste Spalte nicht verschieben lässt?

Eine herkömmliche Methode habe ich dafür nicht gefunden.
Dann habe ich an soetwas wie nen MouseListener gedacht, der einfach das entsprechende Event schluckt. Hab aber keine Ahnung wo ich den dranhängen soll...
 
Danke!
für deine Anteilnahme.

Hab mir auch die Links angeschaut.
Ziemlich wilde Ideen dabei...

Ich habs jetzt selber rausgefunden:

Java:
table.getTableHeader().addMouseMotionListener(new MouseMotionAdapter() {

            @Override
            public void mouseDragged(MouseEvent e)
            {
                if (table.getTableHeader().getDraggedColumn() != null)
                {
                    if (table.getTableHeader().getDraggedColumn().getModelIndex() == 0)
                        table.getTableHeader().setDraggedColumn(null);
                }
            }
        });

so klappt es ausgezeichnet!
Die Spalte mit Index = 0 lässt sich somit nicht mehr verschieben!

Allerdings:
Spalte mit Index = 1 lässt dennoch LINKS vor Spalte0 verschieben.
Somit ist - die Ursprüngliche Spalte0 - nun an Index 1. :(

Hab mir nochmal deine Links genauer angeschaut.
Eine sehr adäquate Lösung war tatsächlich dabei!

Wobei der fromIndex und toIndex definieren,
welche Spalten (von links gesehen) nicht verschiebbar sein sollen.
Daher muss natürlich fromIndex und toIndex gleich sein.

Java:
final JTableHeader header = this.getTableHeader();
        final TableColumnModel columnModel = header.getColumnModel();
        columnModel.addColumnModelListener(new TableColumnModelListener() {
            public void columnMoved(TableColumnModelEvent e) {
                int fromIndex = e.getFromIndex();
                int toIndex   = e.getToIndex();
                if (fromIndex == toIndex) return;
                if (fromIndex <= 0 || toIndex <= 0) {
                    header.setDraggedColumn(null);
                    columnModel.removeColumnModelListener(this);
                    columnModel.moveColumn(fromIndex, toIndex);
                    columnModel.addColumnModelListener(this);
                }
            }
            public void columnAdded(TableColumnModelEvent e) {}
            public void columnRemoved(TableColumnModelEvent e) {}
            public void columnMarginChanged(ChangeEvent e) {}
            public void columnSelectionChanged(ListSelectionEvent e) {}
        });

Danke für den Hinweis!
 
Ja, wollt noch geschrieben haben, der 2. Link ist wahrscheinlich besser :)
Aber so sieht man, das es auch Leute gibt die tatsächlich sich die LInks anschauen :) Freut mich. :D
 

Neue Beiträge

Zurück