PageTablePage.java 3.36 KB
package cn.csbr.app.gui.page;

import cn.csbr.app.gui.component.common.CommTable;
import cn.csbr.app.gui.component.common.CommTableColumn;
import cn.csbr.app.gui.component.common.CommTableDataLoader;
import cn.csbr.app.gui.component.common.PageBar;
import cn.csbr.app.gui.handler.ReturnMainPageHandler;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Collection;
import java.util.List;

/**
 * 非控件版本的 分页面板
 * @param <T>
 */
public class PageTablePage<T>  {
    private CommTable<Page<T>> commTable;
    private VBox contentBox = new VBox();
    private HBox header = new HBox(); //水平条件的
    private PageBar pagebox = new PageBar();
    private EventHandler<ActionEvent> queryHandler;
    public PageTablePage(Collection<Node> headerNodes, List<CommTableColumn>columns, CommTableDataLoader<T> dataLoader){
        header.setSpacing(10);
        header.setPadding(new Insets(30, 0, 30, 0));
        if(headerNodes!=null&& headerNodes.size()>0){
            header.getChildren().addAll(headerNodes);
        }
        header.setMinHeight(90);
        header.setMaxHeight(90);
        header.setPrefHeight(90);

        contentBox.getChildren().addAll(header, buildTable(columns ,dataLoader), pagebox);
//        contentBox.setStyle("--fx-text-alignment:center;-fx-alignment:center;");
        contentBox.setMaxHeight(1000);
        contentBox.setMinWidth(1000);
        contentBox.setPrefHeight(1000);
        contentBox.setFillWidth(true);
        contentBox.setAlignment(Pos.TOP_CENTER);
        queryHandler=(e)->{
            Platform.runLater(() -> search());
        };
        pagebox.setNextCallBack(queryHandler);
        pagebox.setPreCallBack(queryHandler);
    }

    private CommTable buildTable(List<CommTableColumn>columns,CommTableDataLoader<T> dataLoader) {
        commTable = new CommTable(columns, ()->{
            int pageSize=pagebox.getPageSize();
            int pageNo=pagebox.getNewPage();
            PageHelper.startPage(pageNo,pageSize);
            Page<T> results=(Page<T>) dataLoader.loadData();
            pagebox.refresh(results.getPageNum(),results.getPages());
            return results;
        });
        return commTable;
    }
    public Node createContent(){
        return contentBox;
    }
    private    void search() {
        commTable.updateDatas();
    }
    public synchronized EventHandler<ActionEvent> getQueryHandler(){

        return queryHandler;
    }

    public CommTable<Page<T>> getCommTable() {
        return commTable;
    }

    public void setCommTable(CommTable<Page<T>> commTable) {
        this.commTable = commTable;
    }

    public VBox getContentBox() {
        return contentBox;
    }

    public void setContentBox(VBox contentBox) {
        this.contentBox = contentBox;
    }

    public HBox getHeader() {
        return header;
    }

    public void setHeader(HBox header) {
        this.header = header;
    }

    public PageBar getPagebox() {
        return pagebox;
    }

    public void setPagebox(PageBar pagebox) {
        this.pagebox = pagebox;
    }
}