JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen.

  • Themenstarter Themenstarter Gelöschtes Mitglied 56712
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 56712

Gast
Wer weiss denn sowas... (@KonradN)

Ausganslage: JTable
Habe mit:
Java:
 breite=0;
       colModel.getColumn(column).setMaxWidth(breite);
       colModel.getColumn(column).setMinWidth(breite);
       colModel.getColumn(column).setPreferredWidth(breite);
eine Spalte ausgeblendet, aber wenn ich jetzt zwischen zwei Spalten mausPressed und Dragge, wird mir die ausgeblendete Spalte aufgezogen!?
(sofern sich eine ausgeblendtet Spalte dazwischen befindet)
Ich prüfe ob aktueller Spalten-Index eine Spalte mit getWidth oder getPrefferedSize().width == 0 und setze Spalten-Index --!
Code:
e.consume()
return;
hilft mir da nicht. Wie setze ich dem Dragg-Ereignis, dass es den neuen Spalten-Index aufziehen soll, ohne die Maustaste los zulassen?

Wie lösst man so etwas?
Oder anders gefragt: Wie setzt man in JTable eine Spalte auf "setVisible(false)"???

Vielen Dank für Hilfe.
Richi
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank @mihe7
TableColumnModel mittels remove.
wird es dann auch aus dem DefaultTableModel geslöscht oder nur im TableColumnModel.
Ich kann das jetzt nicht testen ohne eine neue Anwendung zu Testzwecken zu schreiben. (darum die Frage)
Ersteres wäre eigentlich super, das mit wieder anzeigen wäre dann kein Problem.
Gruss Richi
 
Kleine Ergänzung: es hindert Dich ja nichts daran, die Spalte aus dem TableModel zu entfernen. Ein AbstractTableModel implementieren, dort eine Methode zum Entfernen einer Spalte, in dieser fireTableStructureChanged aufrufen, der Rest sollte automatisch funktionieren.
 
@mihe7
Kleine Ergänzung: es hindert Dich ja nichts daran, die Spalte aus dem TableModel zu entfernen. Ein AbstractTableModel implementieren
Bin halt nicht ein Hirsch in sachen Java... aber man lernt immer dazu! Selbst mit 65!
Das war der richtige Weg!

Vielen Dank
Richi
 
Sorry @mihe7
Habe mit: TableColumn spalte = colModel.getColumn(column); die Spalte in eine Variabel geleget.
Das ausblenden (removeCoumn(spalte)) funktioniert einwandfrei!!!
Aber:
colModel.addColumn(spalte); fügt die Spalte am Ende ein.
Sowas wie insert spalte atIndex x konnte ich nicht finden, resp. eine Methode dazu schreiben.

Wie löse ich jetzt das?
Vielen Dank.
 
War's leider nicht...
habs irgendwo gefunden (...) und löse es jetzt so.

Java:
     * Eine Spalte ein- / ausblenden.
     * @param column Spalten-Index
     * @param visible Einblenden = <b>true</b> andernfalls <b>false</b>
     */
    public void setColumnVisible(int column, boolean visible) {
        TableColumnModel colModel = rth.getColumnModel();
        String spText = rtm.getColumnName(column);
        if(visible) {
            TableColumn spalte = alleSpalten.get(spText);
            colModel.addColumn(spalte);
            int aktIDX = colModel.getColumnCount()-1;
            colModel.moveColumn(aktIDX, column);
        }
        else {
            TableColumn spalte = colModel.getColumn(column);
            colModel.removeColumn(spalte);
        }
    }
Wobei:
  • rth der jTableHeader und
  • rtm das JTableModel ist.
  • alleSpalten die HashMap<String, TableColumn> (Spaltenname, ausgeblendete TableColumn).
addColumn(spalte) und moveColumn(letzteSpalte-Index, sollIndex)
genau das macht was ich gesucht habe.
 

Zurück
Oben