Javafx 2 JavaFX TableView分页器

Javafx 2 JavaFX TableView分页器,javafx-2,javafx,Javafx 2,Javafx,如何在TableView分页器中使用?。对于此示例 public class SampleController implements Initializable { @FXML private TableView<Student> table; @FXML private TableColumn<Student, Integer> id; @FXML private TableColumn<Student, String> name;

如何在TableView分页器中使用?。对于此示例

public class SampleController implements Initializable {

    @FXML private TableView<Student> table;
    @FXML private TableColumn<Student, Integer> id;
    @FXML private TableColumn<Student, String> name;
    @FXML private ObservableList<Student> list = FXCollections.observableArrayList();
    //  @FXML private Pagination pagination;
    // 
    private StudentSQL ssql = new StudentSQL();
    private Stage stage = new Stage();
    private String row;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        id.setCellValueFactory(new PropertyValueFactory<Student, Integer>("id"));
        name.setCellValueFactory(new PropertyValueFactory<Student, String>("name"));
        list = ssql.students();
        table.setItems(list);
    }
}
公共类SampleController实现可初始化{
@FXML私有表视图表;
@FXML私有表列id;
@FXML私有表列名;
@FXML private ObservableList=FXCollections.observableArrayList();
//@FXML私有分页分页;
// 
private StudentSQL ssql=new StudentSQL();
私有阶段=新阶段();
私有字符串行;
@凌驾
公共void初始化(URL、ResourceBundle rb){
id.setCellValueFactory(新属性ValueFactory(“id”);
名称。setCellValueFactory(新属性ValueFactory(“名称”);
list=ssql.students();
表2.设置项目(列表);
}
}

以下是一些将TableView与分页控件集成的示例代码

public class SampleController implements Initializable {

    @FXML private TableView<Student> table;
    @FXML private TableColumn<Student, Integer> id;
    @FXML private TableColumn<Student, String> name;
    @FXML private ObservableList<Student> list = FXCollections.observableArrayList();
    //  @FXML private Pagination pagination;
    // 
    private StudentSQL ssql = new StudentSQL();
    private Stage stage = new Stage();
    private String row;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        id.setCellValueFactory(new PropertyValueFactory<Student, Integer>("id"));
        name.setCellValueFactory(new PropertyValueFactory<Student, String>("name"));
        list = ssql.students();
        table.setItems(list);
    }
}
代码来自Shakir Quasaroff对Oracle JavaFX论坛请求控件的回答。示例代码是纯Java解决方案,而不是原始问题中的Java代码/FXML混合

public class SampleController implements Initializable {

    @FXML private TableView<Student> table;
    @FXML private TableColumn<Student, Integer> id;
    @FXML private TableColumn<Student, String> name;
    @FXML private ObservableList<Student> list = FXCollections.observableArrayList();
    //  @FXML private Pagination pagination;
    // 
    private StudentSQL ssql = new StudentSQL();
    private Stage stage = new Stage();
    private String row;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        id.setCellValueFactory(new PropertyValueFactory<Student, Integer>("id"));
        name.setCellValueFactory(new PropertyValueFactory<Student, String>("name"));
        list = ssql.students();
        table.setItems(list);
    }
}
import java.util.List;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Pagination;
import javafx.scene.Node;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextArea;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;

public class TablePager extends Application {

    final ObservableList<Person> data = FXCollections.observableArrayList(
            new Person("1", "Joe", "Pesci"),
            new Person("2", "Audrey", "Hepburn"),
            new Person("3", "Gregory", "Peck"),
            new Person("4", "Cary", "Grant"),
            new Person("5", "De", "Niro"),
            new Person("6", "Katharine", "Hepburn"),
            new Person("7", "Jack", "Nicholson"),
            new Person("8", "Morgan", "Freeman"),
            new Person("9", "Elizabeth", "Taylor"),
            new Person("10", "Marcello", "Mastroianni"),
            new Person("11", "Innokenty", "Smoktunovsky"),
            new Person("12", "Sophia", "Loren"),
            new Person("13", "Alexander", "Kalyagin"),
            new Person("14", "Peter", "OToole"),
            new Person("15", "Gene", "Wilder"),
            new Person("16", "Evgeny", "Evstegneev"),
            new Person("17", "Michael", "Caine"),
            new Person("18", "Jean-Paul", "Belmondo"),
            new Person("19", " Julia", "Roberts"),
            new Person("20", "James", "Stewart"),
            new Person("21", "Sandra", "Bullock"),
            new Person("22", "Paul", "Newman"),
            new Person("23", "Oleg", "Tabakov"),
            new Person("24", "Mary", "Steenburgen"),
            new Person("25", "Jackie", "Chan"),
            new Person("26", "Rodney", "Dangerfield"),
            new Person("27", "Betty", "White"),
            new Person("28", "Eddie", "Murphy"),
            new Person("29", "Amitabh", "Bachchan"),
            new Person("30", "Nicole", "Kidman"),
            new Person("31", "Adriano", "Celentano"),
            new Person("32", "Rhonda", " Fleming's"),
            new Person("32", "Humphrey", "Bogart"));
    private Pagination pagination;

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

    public int itemsPerPage() {
        return 1;
    }

    public int rowsPerPage() {
        return 5;
    }

    public VBox createPage(int pageIndex) {
        int lastIndex = 0;
        int displace = data.size() % rowsPerPage();
        if (displace > 0) {
            lastIndex = data.size() / rowsPerPage();
        } else {
            lastIndex = data.size() / rowsPerPage() - 1;

        }

        VBox box = new VBox(5);
        int page = pageIndex * itemsPerPage();

        for (int i = page; i < page + itemsPerPage(); i++) {
            TableView<Person> table = new TableView<Person>();
            TableColumn numCol = new TableColumn("ID");
            numCol.setCellValueFactory(
                    new PropertyValueFactory<Person, String>("num"));

            numCol.setMinWidth(20);

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


            firstNameCol.setMinWidth(160);

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

            lastNameCol.setMinWidth(160);

            table.getColumns().addAll(numCol, firstNameCol, lastNameCol);
            if (lastIndex == pageIndex) {
                table.setItems(FXCollections.observableArrayList(data.subList(pageIndex * rowsPerPage(), pageIndex * rowsPerPage() + displace)));
            } else {
                table.setItems(FXCollections.observableArrayList(data.subList(pageIndex * rowsPerPage(), pageIndex * rowsPerPage() + rowsPerPage())));
            }


            box.getChildren().add(table);
        }
        return box;
    }

    @Override
    public void start(final Stage stage) throws Exception {

        pagination = new Pagination((data.size() / rowsPerPage() + 1), 0);
        //   pagination = new Pagination(20 , 0);
        pagination.setStyle("-fx-border-color:red;");
        pagination.setPageFactory(new Callback<Integer, Node>() {
            @Override
            public Node call(Integer pageIndex) {
                if (pageIndex > data.size() / rowsPerPage() + 1) {
                    return null;
                } else {
                    return createPage(pageIndex);
                }
            }
        });

        AnchorPane anchor = new AnchorPane();
        AnchorPane.setTopAnchor(pagination, 10.0);
        AnchorPane.setRightAnchor(pagination, 10.0);
        AnchorPane.setBottomAnchor(pagination, 10.0);
        AnchorPane.setLeftAnchor(pagination, 10.0);
        anchor.getChildren().addAll(pagination);
        Scene scene = new Scene(anchor, 400, 250);
        stage.setScene(scene);
        stage.setTitle("Table pager");
        stage.show();
    }

    public static class Person {

        private final SimpleStringProperty num;
        private final SimpleStringProperty firstName;
        private final SimpleStringProperty lastName;

        private Person(String id, String fName, String lName) {
            this.firstName = new SimpleStringProperty(fName);
            this.lastName = new SimpleStringProperty(lName);
            this.num = new SimpleStringProperty(id);
        }

        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 getNum() {
            return num.get();
        }

        public void setNum(String id) {
            num.set(id);
        }
    }
}   
import java.util.List;
导入javafx.application.application;
导入javafx.beans.property.SimpleStringProperty;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.scene.scene;
导入javafx.scene.control.Pagination;
导入javafx.scene.Node;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.control.TextArea;
导入javafx.scene.control.cell.PropertyValueFactory;
导入javafx.scene.layout.ancorpane;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
导入javafx.util.Callback;
公共类TablePager扩展了应用程序{
最终ObservableList数据=FXCollections.observableArrayList(
新人(“1”、“乔”、“佩西”),
新人(“2”、“奥黛丽”、“赫本”),
新人(“3”、“格雷戈里”、“佩克”),
新人(“4”、“卡里”、“格兰特”),
新人(“5”、“德”、“尼罗”),
新人(“6”,“凯瑟琳”,“赫本”),
新人(“7”、“杰克”、“尼科尔森”),
新人(“8”、“摩根”、“弗里曼”),
新人(“9”、“伊丽莎白”、“泰勒”),
新人(“10”、“马塞洛”、“马斯特罗亚尼”),
新人(“11”、“Innokenty”、“Smoktunovsky”),
新人(“12”、“索菲亚”、“罗兰”),
新人(“13”、“亚历山大”、“卡利亚金”),
新人(“14”,“彼得”,“耳洞”),
新人(“15”、“基因”、“怀尔德”),
新人(“16”、“埃夫根尼”、“埃夫斯特涅夫”),
新人(“17”、“迈克尔”、“凯恩”),
新人(“18”、“Jean-Paul”、“Belmondo”),
新人(“19”、“朱莉娅”、“罗伯茨”),
新人(“20”、“詹姆斯”、“斯图尔特”),
新人(“21”、“桑德拉”、“布洛克”),
新人(“22”、“保罗”、“纽曼”),
新人(“23”、“奥列格”、“塔巴科夫”),
新人(“24”、“玛丽”、“斯滕伯格”),
新人(“25”、“成龙”、“成龙”),
新人(“26”、“罗德尼”、“丹格菲尔德”),
新人(“27”、“贝蒂”、“怀特”),
新人(“28”、“埃迪”、“墨菲”),
新人(“29”、“阿弥陀佛”、“八禅”),
新人(“30”、“妮可”、“基德曼”),
新人(“31”、“阿德里亚诺”、“塞伦塔诺”),
新人(“32”、“朗达”、“弗莱明”),
新人(“32”、“汉弗莱”、“博加特”);
私有分页分页;
公共静态void main(字符串[]args)引发异常{
发射(args);
}
public int itemsPerPage(){
返回1;
}
public int rowsPerPage(){
返回5;
}
公共VBox createPage(int pageIndex){
int lastIndex=0;
int displace=data.size()%rowsPerPage();
如果(置换>0){
lastIndex=data.size()/rowsPerPage();
}否则{
lastIndex=data.size()/rowsPerPage()-1;
}
VBox框=新的VBox(5);
int page=pageIndex*itemsPerPage();
对于(int i=page;idata.size()/rowsPerPage()+1){
返回null;
}否则{
返回createPage(pageIndex);
}
}
});
锚烷锚=新锚烷();
AnchorPane.setTopAnchor(宾夕法尼亚州)