2013-10-08 23 views
7

Ich habe eine einfache Java FX-Anwendung, die eine Tabellenansicht hat. Die Tabellenansicht zeigt einige Daten, die in einer bestimmten Reihenfolge sortiert sind. Gibt es eine Möglichkeit, den Pfeil (standardmäßig) anzuzeigen, der angibt, dass die Daten in dieser Reihenfolge sortiert wurden?JavaFX: TableView: Pfeil für eine standardmäßig sortierte Spalte

Mein Code ist unten:

import java.util.Collections; 

import javafx.application.Application; 
import javafx.beans.property.SimpleIntegerProperty; 
import javafx.beans.property.SimpleStringProperty; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.scene.layout.VBox; 
import javafx.scene.text.Font; 
import javafx.stage.Stage; 

public class TableViewSample extends Application 
{ 

private TableView<Person>   tableView = new TableView<Person>(); 
private final ObservableList<Person> data  = FXCollections.observableArrayList(new Person(
                "Allan", "Smith", "[email protected]", 
                22), new Person("Zombie", "Jack", 
                "[email protected]", 23), new Person(
                "Michael", "Rock", "[email protected]", 
                24), new Person("Best", "Jones", 
                "[email protected]", 11), new Person(
                "Michael", "Brown", 
                "[email protected]", 14)); 

public static void main(String[] args) 
{ 
    launch(args); 
} 

@Override 
public void start(Stage stage) 
{ 
    Scene scene = new Scene(new Group()); 
    stage.setTitle("Table View Sample"); 
    stage.setWidth(650); 
    stage.setHeight(500); 

    final Label label = new Label("Roster"); 
    label.setFont(new Font("Arial", 10)); 

    tableView.setEditable(true); 

    TableColumn firstNameCol = new TableColumn("First Name"); 
    firstNameCol.setMinWidth(100); 
    firstNameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("firstName")); 


    TableColumn lastNameCol = new TableColumn("Last Name"); 
    lastNameCol.setMinWidth(100); 
    lastNameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("lastName")); 

    TableColumn emailCol = new TableColumn("Email"); 
    emailCol.setMinWidth(200); 
    emailCol.setCellValueFactory(new PropertyValueFactory<Person, String>("email")); 

    TableColumn ageCol = new TableColumn("Age"); 
    ageCol.setMinWidth(200); 
    ageCol.setCellValueFactory(new PropertyValueFactory<Person, Integer>("age")); 

    Collections.sort(data); 

    tableView.setItems(data); 
    tableView.getColumns().addAll(firstNameCol, lastNameCol, emailCol, ageCol); 


    final VBox vbox = new VBox(); 
    vbox.setSpacing(5); 
    vbox.getChildren().addAll(label, tableView); 

    ((Group) scene.getRoot()).getChildren().addAll(vbox); 

    stage.setScene(scene); 
    stage.show(); 
} 
public static class Person implements Comparable<Person> 
{ 

    private final SimpleStringProperty firstName; 
    private final SimpleStringProperty lastName; 
    private final SimpleStringProperty email; 
    private final SimpleIntegerProperty age; 


    private Person(String fName, String lName, String email, int age) 
    { 
     this.firstName = new SimpleStringProperty(fName); 
     this.lastName = new SimpleStringProperty(lName); 
     this.email = new SimpleStringProperty(email); 
     this.age = new SimpleIntegerProperty(age); 
    } 

    public SimpleIntegerProperty getAge() 
    { 
     return age; 
    } 

    public void setAge(int passedAge) 
    { 
     age.set(passedAge); 
    } 

    public String getFirstName() 
    { 
     return firstName.get(); 
    } 

    public void setFirstName(String fName) 
    { 
     firstName.set(fName); 
    } 

    public String getLastName() 
    { 
     return lastName.get(); 
    } 

    public void setLastName(String fName) 
    { 
     lastName.set(fName); 
    } 

    public String getEmail() 
    { 
     return email.get(); 
    } 

    public void setEmail(String fName) 
    { 
     email.set(fName); 
    } 

    public int compareTo(Person o) 
    { 
     return firstName.get().compareTo(o.getFirstName()); 
    } 
} 
} 

Antwort

24

Versuchen

... 
firstNameCol.setSortType(TableColumn.SortType.ASCENDING); 
... 
tableView.setItems(data); 
tableView.getColumns().addAll(firstNameCol, lastNameCol, emailCol, ageCol); 
tableView.getSortOrder().add(firstNameCol); 
... 

Siehe auch die Diskussion über: Javafx: Re-sorting a column in a TableView.