Wie verhindert man, dass TableView die Reihenfolge von TableColumn in javaFX 8 ändert?

8

Ich lese das Ссылка , aber ich habe in der API von JavaFX 8.There nichts gefunden ist es nicht möglich, das Umordnen in TableView zu verhindern?

    
geo 05.03.2014, 15:59
quelle

5 Antworten

12

Habe einen halben Tag damit verbracht, das Problem zu lösen. Vielleicht kann meine Untersuchung für jemand anderen nützlich sein. Es ist möglich, die Neuanordnung von Spalten mit Hilfe einiger Hacks zu deaktivieren. Und hier sind die Schritte:

  1. Holen Sie sich Tabellenkopfzeile. Dies kann wie folgt geschehen: Ссылка
  2. Fügen Sie change event listener zu reorderingProperty hinzu, wodurch die Neuordnung auf false zurückgesetzt wird.

Der vollständige Code ist hier:

%Vor%

Ich bin nicht sicher über Nebenwirkungen dieser Lösung, aber schnelle Tests zeigen, dass die Lösung gut funktioniert.

    
Alexander Chingarev 20.05.2015, 08:33
quelle
4

Ich mag die Idee von Alexander Chingarev, aber ich denke, der Code wird Speicherlecks erzeugen! Jedes Mal, wenn sich die width -Eigenschaft ändert, wird ein neuer Listener registriert und ältere Listener werden niemals als Garbage Collection erfasst. Sie können also entweder einen Verweis auf den Listener speichern und sicherstellen, dass dieser vor dem Hinzufügen eines neuen Listeners aus dem beobachtbaren Wert entfernt wird (in diesem Fall die Neuordnungseigenschaft), oder Sie stellen sicher, dass der Listener nur einmal zur Neuordnungseigenschaft hinzugefügt wird.

Ich habe die Skin-Eigenschaft verwendet, die sich nur einmal ändert (wenn ich mich nicht irre), um meinen Listener hinzuzufügen:

%Vor%     
JOpolka 07.09.2016 09:19
quelle
3

Die in Java 8 RT-24669 hinzugefügte API ist column.impl_setReorderable(false); .

Sie können die impl_setReorderable -Definition in der TableColumnBase.java Quelle.

Diese API ist jedoch nur für den internen Gebrauch vorgesehen, wird als veraltet markiert und ist nicht Teil der öffentlichen JavaFX-API.

Im Allgemeinen werden impl_ -Methoden in JavaFX irgendwann in der Zukunft entfernt, wodurch möglicherweise Ihr Code zu diesem Zeitpunkt zerstört wird, wenn Sie versucht haben, sie zu verwenden.

Wenn Sie den Code für die Implementierung der Eigenschaft "reorderable" in Tabellenspalten überprüfen, ignoriert er bestimmte Mausereignisse, die an den Spaltentitel der Tabelle gerichtet sind. Durchsuchen Sie die TableColumnHeader.java Code für isReorderable für weitere Informationen.

Ich bin mir nicht sicher, wie Sie genau dasselbe Verhalten wie die impl_setReorderable API erreichen würden, wenn Sie nur die öffentliche JavaFX-API verwenden, ohne ziemlich viel Arbeit zu verrichten.

    
jewelsea 05.03.2014 21:15
quelle
1

Danke! Es funktioniert auch mit Lambda, wenn Sie mehrere Tabellen haben, die Sie deaktivieren möchten.

%Vor%     
iamkenos 21.12.2016 10:05
quelle
1

Ich kenne die mit java-8 gekennzeichnete Frage, aber für diejenigen, die mitkommen, In Java 9 alle oben genannten Codes würden aufgrund von Modularität, die .sun package unzugänglich machen, und der Entfernung von impl_ nicht funktionieren. Trotz dieser Änderungen werden bequeme öffentliche Methoden eingeführt, die Sie verwenden können:

  • setReorderable(boolean value)
  • getReorderable()

für TableColumnBase , z. B. TableColumn , das für den Satz Umsortierbar verwendet werden soll,

    
user33732 10.10.2017 19:47
quelle

Tags und Links