用于默认排序的列的箭头

用于默认排序的列的箭头

本文介绍了JavaFX:TableView:用于默认排序的列的箭头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个具有表视图的简单Java fx应用程序.表格视图显示了按特定顺序排序的一些数据.有没有一种方法可以显示箭头(默认情况下),该箭头指示数据已经按照该顺序排序了?

I have a simple java fx application which has a table view. The table view shows some data that is sorted in a certain order. Is there a way to show the arrow(by default) indicating that the data has been sorted in that order?

我的代码如下:

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

推荐答案

尝试

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

另请参见以下讨论: Javafx:对列进行重新排序在TableView中.

这篇关于JavaFX:TableView:用于默认排序的列的箭头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-18 19:23