2013-10-08 16 views
7

Tôi có một ứng dụng java fx đơn giản có chế độ xem bảng. Chế độ xem bảng hiển thị một số dữ liệu được sắp xếp theo một thứ tự nhất định. Có cách nào để hiển thị mũi tên (theo mặc định) cho biết dữ liệu đã được sắp xếp theo thứ tự đó không?JavaFX: TableView: Mũi tên cho một cột được sắp xếp theo mặc định

Mã của tôi là dưới đây:

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()); 
    } 
} 
} 

Trả lời

24

Hãy thử

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

Xem thêm các cuộc thảo luận về: Javafx: Re-sorting a column in a TableView.

Các vấn đề liên quan