ETable columns recreated incorrectly

Offen
#9,596 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
78/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
java
Bereich
desktop

Rechercherichtung

Beginnen Sie in ETableTest mit den mitgelieferten Reproduktionstests und führen Sie sie aus, um die Fehler bei Reihenfolge und Sortierung zu bestätigen. Untersuchen Sie anschließend ETable.createDefaultColumnsFromModel und die zugehörige Handhabung von ETableColumnModel, einschließlich ausgeblendeter Spalten. Die Aufgabe ist erledigt, wenn rekonstruierte Spalten nach dem Verschieben oder Ändern des Modells Reihenfolge, Sortierstatus, ausgeblendete Spalten und Breite beibehalten.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Contribution welcome kind:bug needs:triage Platform UI
Apache NetBeans version

Apache NetBeans 32 latest daily build

What happened

When recreating columns from the model in ETable, column ordering, sort order, and (sometimes) width revert to their defaults. Add these unit tests to ETableTest and you'll see they both fail.

public void testRecreatingColumnsShouldMaintainOrder() {
    ETable t = createTestingTable(false);
    t.moveColumn(1, 0);
    t.createDefaultColumnsFromModel();

    assertEquals("BB", t.getColumnModel().getColumn(0).getIdentifier());
    assertEquals("AA", t.getColumnModel().getColumn(1).getIdentifier());
}

public void testRecreatingColumnsShouldMaintainSortAfterMoving() {
    ETable t = createTestingTable(false);
    t.setColumnSorted(0, true, 1);
    t.moveColumn(1, 0);
    t.createDefaultColumnsFromModel();

    var etc = (ETableColumn) t.getColumnModel().getColumn(1);
    assertTrue(etc.isAscending());
    assertEquals(1, etc.getSortRank());
}

There seems to be some mixup between model index and view index. I tried some simple changes to store the values in sortedColumnIndexes using the view index and setting the new columns' model index from the previous table column, but this messed up the hidden columns. The following unit test passes with the existing code, but failed with my updates so it may be worth adding as well to ensure no regression.

public void testHiddenColumnsCorrectAfterRecreatingColumns() {
    ETable t = createTestingTable(false);
    var etcm = (ETableColumnModel) t.getColumnModel();
    etcm.setColumnHidden(etcm.getColumn(0), true);
    t.createDefaultColumnsFromModel();

    assertEquals("BB", etcm.getColumn(0).getIdentifier());
}

Finally, although I haven't been able to reproduce a failure of the width, I have seen it periodically in the UI when using the OutlineView. As such, a test similar to the following may be worth adding as well.

public void testRecreatingColumnsShouldMaintainSizeAfterMoving() {
    ETable t = createTestingTable(false);
    final int width = 500;
    t.getColumnModel().getColumn(0).setWidth(width);
    t.moveColumn(1, 0);
    t.createDefaultColumnsFromModel();

    assertEquals(width, t.getColumnModel().getColumn(1).getWidth());
}
Language / Project Type / NetBeans Component

No response

How to reproduce
  1. Create an OutlineView instance
  2. Sort, reorder, and resize columns in the UI
  3. Trigger column recreation, typically by triggering a "tableChanged" as the result of adding or removing a node to/from the view
Did this work correctly in an earlier version?

No / Don't know

Operating System

All

JDK

Eclipse Adoptium 25.0.2

Apache NetBeans packaging

Apache NetBeans platform

Anything else

No response

Are you willing to submit a pull request?

No

Vorherrschende Sprache
Java
Sterne
3.1k
Forks
945
Ø Merge
3 T. 9 Std.
Gemergte PRs (30 T.)
44

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus apache/netbeans

Alle Issues in apache/netbeans

Ähnliche Issues

Weitere Issues zu Java

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.