I have a simple java fx application that looks like a table. The table view displays some data that is sorted in a specific order. Is there a way to show an arrow (by default) indicating that the data was sorted in that order?
My code is below:
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", " allan.smith@example.com ", 22), new Person("Zombie", "Jack", " zombie.jack@test.com ", 23), new Person( "Michael", "Rock", " michael.rock@yahoo.com ", 24), new Person("Best", "Jones", " best.jones@example.com ", 11), new Person( "Michael", "Brown", " michael.brown@example.com ", 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()); } } }
sorted javafx-2 tableview tablecolumn
Aspirant
source share