javafx实现上一步,下一步的控制窗口(用stackpane)

import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;

public abstract class WizardPageUtil extends VBox{
    Button priorButton = new Button("上一步");
    Button nextButton = new Button("下一步");
    Button cancelButton = new Button("取消");
    Button finishButton = new Button("完成");

     public WizardPageUtil() {
        super();

    }

    public WizardPageUtil(double arg0, Node... arg1) {
        super(arg0, arg1);
        // TODO Auto-generated constructor stub
    }

    public WizardPageUtil(double arg0) {
        super(arg0);

    }

    public WizardPageUtil(Node... arg0) {
        super(arg0);

    }

    protected WizardPageUtil(String title) {


        setSpacing(5);


        Region spring = new Region();
        VBox.setVgrow(spring, Priority.ALWAYS);
        getChildren().addAll(new Text(title),getContent(), spring, getButtons());

        priorButton.setOnAction(event -> priorPage());
        nextButton.setOnAction(event -> nextPage());
        cancelButton.setOnAction(event -> getWizard().cancel());
        finishButton.setOnAction(event -> getWizard().finish());
    }

    HBox getButtons() {
        Region spring = new Region();
        HBox.setHgrow(spring, Priority.ALWAYS);
        HBox buttonBar = new HBox(5);
        cancelButton.setCancelButton(true);
        finishButton.setDefaultButton(true);
        buttonBar.getChildren().addAll(spring, priorButton, nextButton, cancelButton, finishButton);
        return buttonBar;
    }

    public abstract Parent getContent();

    boolean hasNextPage() {
        return getWizard().hasNextPage();
    }

    boolean hasPriorPage() {
        return getWizard().hasPriorPage();
    }

    void nextPage() {
        getWizard().nextPage();
    }

    void priorPage() {
        getWizard().priorPage();
    }

    void navTo(String id) {
        getWizard().navTo(id);
    }

    WizardUtil getWizard() {
        return (WizardUtil) getParent();
    }
    public void manageButtons() {
        if (!hasPriorPage()) {
            priorButton.setDisable(true);
        }

        if (!hasNextPage()) {
            nextButton.setDisable(true);
        }
        if(nextButton.isDisable()){
            finishButton.setDisable(false);
        }else{
            finishButton.setDisable(true);
        }
    }
}
import java.util.Stack;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.layout.StackPane;

public class WizardUtil extends StackPane{
    private static final int UNDEFINED = -1;
    private ObservableList pages = FXCollections.observableArrayList();
    private Stack history = new Stack<>();
    protected int curPageIdx = UNDEFINED;
    protected WizardUtil(WizardPageUtil... nodes) {
        pages.addAll(nodes);
        navTo(0);
    }

      public void nextPage() {
        if (hasNextPage()) {
            navTo(curPageIdx + 1);
        }
    }

     void priorPage() {
        if (hasPriorPage()) {
            navTo(history.pop(), false);
        }
    }

    protected boolean hasNextPage() {
        return (curPageIdx < pages.size() - 1);
    }
     boolean hasPriorPage() {
        return !history.isEmpty();
    }

    void navTo(int nextPageIdx, boolean pushHistory) {
        if (nextPageIdx < 0 || nextPageIdx >= pages.size()) return;
        if (curPageIdx != UNDEFINED) {
            if (pushHistory) {
                history.push(curPageIdx);
            }
        }

        WizardPageUtil nextPage = pages.get(nextPageIdx);
        curPageIdx = nextPageIdx;
        getChildren().clear();
        getChildren().add(nextPage);
        nextPage.manageButtons();
    }

     protected void navTo(int nextPageIdx) {
        navTo(nextPageIdx, true);
    }

     void navTo(String id) {
        if (id == null) {
            return;
        }

        pages.stream()
                .filter(page -> id.equals(page.getId()))
                .findFirst()
                .ifPresent(page ->
                                navTo(pages.indexOf(page))
                );
    }

    public void finish() {
    }

    public void cancel() {
    }
}
public class HandleInterfaceDataWizardUtil extends WizardUtil {
     Stage owner;
     String rst="";
     static Date planDate;
     Long schPlanId;
     String ifIdStr;

     private IFimsPlanService planService = FimsServiceFactory.getService(IFimsPlanService.class);

     static HandleInterfaceDataFront nhidf=new HandleInterfaceDataFront(FPcontroller.date);
     static HandleInterfaceDataBack nhidb;

        public HandleInterfaceDataWizardUtil(Stage owner,Date date) {
            super(nhidf,nhidb);
            nhidf.datePicker.setValue(LocalDateConvert.DateToDateTimePickerValue(date));
            nhidf.cb_hx.setSelected(false);
            nhidf.cb_kg.setSelected(false);
            this.owner = owner;
        }

        public void nextPage(){
            super.pages.remove(1);
            nhidb=new HandleInterfaceDataBack();
            super.pages.add(nhidb);
            if(nhidf.datePicker.getValue()==null){
                MessageDialogInfo.openWarning("提示", "请填入航班计划日期", null, ButtonType.OK);
            }else if(nhidf.datePicker.getValue().isBefore(LocalDate.now())){
                MessageDialogInfo.openWarning("提示", "计划日期应该大于当前日期", null, ButtonType.OK);
            }
            else if(!nhidf.cb_hx.isSelected()&&!nhidf.cb_kg.isSelected()){
                MessageDialogInfo.openWarning("提示", "请选择数据接口类型", null, ButtonType.OK);
            }
            else if (hasNextPage()) {
                nhidb=new HandleInterfaceDataBack();
                navTo(curPageIdx + 1);
            }
        }
        public void finish() {
                submitInfo();
            owner.close();
        }
        public void cancel() {
            owner.close();
        }
        private void submitInfo(){
            Alert a=MessageDialogInfo.openInformation("提示", "接口数据处理...", null, ButtonType.OK);
            final Button b_ok=(Button)a.getDialogPane().lookupButton(ButtonType.OK);
            b_ok.setText("转入后台");
            a.show();
            b_ok.setOnAction(new EventHandler() {

                @Override
                public void handle(ActionEvent arg0) {
                    HandleInterfaceDataDialog.stage.hide();
                    a.close();
                }
            });
            rst=planService.handleInterfaceDataForTao(nhidb.flightDate,nhidb.getIfIdStr());
            a.close();
            if(!(rst==null||rst.trim().equals(""))){
                MessageDialogInfo.openInformation("提示", rst, null, ButtonType.OK);
            }
        }
}
import java.util.Date;

import controller.FPcontroller;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.scene.Parent;
import javafx.scene.control.CheckBox;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Separator;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import util.LocalDateConvert;


public class HandleInterfaceDataFront extends WizardPageUtil{
    VBox root;
    Text t1;
    Text t2;
    Text t3;
    Text t4;
    /**
     * 航信数据
     */
    CheckBox cb_hx;

    /**
     * 空管计划报
     */
    CheckBox cb_kg;
    static DatePicker datePicker;
    static Boolean hx=false;
    static Boolean kg=false;
    private Date date;
    public HandleInterfaceDataFront(Date date) {
        super("");
        this.date=date;
    }

    @Override
    public Parent getContent() {
        root=new VBox();
        createCheckBox();
        createText();
        createDatePicker();
        HBox h1=new HBox();
        h1.getChildren().addAll(t2,datePicker);
        HBox h2=new HBox();
        h2.getChildren().addAll(t3,cb_hx);
        HBox h3=new HBox();
        h3.getChildren().add(cb_kg);
        Separator s=new Separator();
        s.setOrientation(Orientation.HORIZONTAL);
        s.setPrefWidth(600);
        s.setMinWidth(600);
        root.getChildren().addAll(t1,h1,h2,h3,s,t4);
        root.setPadding(new Insets(10, 0, 0, 10));
        root.setSpacing(20);
        t1.setFont(Font.font(13));
        h3.setPadding(new Insets(0, 0, 0, 83));
        init();
        return root;
    }
    public void createText(){
        t1=new Text("欢迎使用\"接口数据处理向导\",帮助您完成数据接口校正航班工作。");
        t2=new Text("航班计划日期:");
        t3=new Text("数据接口类型:");
        t4=new Text("要继续执行请点击\"下一步\"。");
    }
    public void createDatePicker(){

        datePicker=new DatePicker(LocalDateConvert.UDateToLocalDate(HandleInterfaceDataDialog.date));
    }
    public void createCheckBox(){
        cb_hx=new CheckBox("航信数据(提供订单系统中的航班信息)");
        cb_kg=new CheckBox("空管计划报(提供计划航班信息)");
    }
    public void init(){
        cb_hx.setSelected(false);
        cb_kg.setSelected(false);
        hx=true;
        cb_hx.selectedProperty().addListener(new ChangeListener() {

            @Override
            public void changed(ObservableValue arg0, Boolean arg1, Boolean arg2) {
                if(arg2){
                    hx=true;
                }else{
                    hx=false;
                }

            }
        });
        cb_kg.selectedProperty().addListener(new ChangeListener() {

            @Override
            public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) {
                if(newValue){
                    kg=true;
                }else{
                    kg=false;
                }
            }
        });
    }

}
import java.util.Date;
import java.util.List;

import com.taocares.naoms.fims.client.remote.service.FimsServiceFactory;
import com.taocares.naoms.fims.dto.config.InterfaceDto;
import com.taocares.naoms.fims.dto.flight.IfParsedDataDto;
import com.taocares.naoms.service.IFimsConfigQueryService;
import com.taocares.naoms.service.IFimsPlanQueryService;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Orientation;
import javafx.scene.Parent;
import javafx.scene.control.Label;
import javafx.scene.control.Separator;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import naoms.client.model.plan.vo.InterfaceDataVo;
import util.FimsConst;
import util.LocalDateConvert;


public class HandleInterfaceDataBack extends WizardPageUtil{
    Text t;
    int inCount =0;
    int outCount =0;
    int sumCount = 0;
    private TableView table;
    public static ObservableList ifParsedDataDtos=FXCollections.observableArrayList();
    public static ObservableList interfaceDataVos=FXCollections.observableArrayList();
    private TableColumn tc_1;
    private TableColumn tc_2;
    private TableColumn tc_3;
    private TableColumn tc_4;
    private TableColumn tc_5;
    private TableColumn tc_6;
    public  Date flightDate=LocalDateConvert.LocalDateToUdate(HandleInterfaceDataFront.datePicker.getValue());
    private String ifIdStr;
    private ObservableList interfaceDtos=FXCollections.observableArrayList();
    private ObservableList list=FXCollections.observableArrayList();
    VBox vbox;
    HBox hbox;
    public HandleInterfaceDataBack() {
        super("");
    }
    @Override
    public Parent getContent() {
        createRoot();
        return vbox;
    }
    public void createRoot(){
        vbox=new VBox();
        vbox.setId("vbox");
        creatTableView();
        init();
        loadtable(flightDate);
        createText();
        Separator s=new Separator();
        s.setId("separator");
        s.setOrientation(Orientation.HORIZONTAL);
        vbox.getChildren().addAll(hbox,table,s);
        vbox.getStylesheets().add(getClass().getResource("/naoms/client/ui/plan/view/css/NewHandleInterfaceDataBack.css").toString());
    }
    public void createText(){
        Text t1=new Text("进港航班:");
        Text t2=new Text(""+inCount);
        Text t3=new Text(" 出港航班:");
        Text t4=new Text(""+outCount);
        Text t5=new Text(" 航班总数为:");
        Text t6=new Text(""+sumCount);
        hbox=new HBox();
        hbox.getChildren().addAll(t1,t2,t3,t4,t5,t6);
        hbox.setSpacing(15);
        t2.setId("t");
        t4.setId("t");
        t6.setId("t");

    }
    public void creatTableView(){
        table=new TableView();
        table.setId("table");
        tc_1=new TableColumn("接口类型");
        tc_2=new TableColumn("进出港");
        tc_3=new TableColumn("航班名称");
        tc_4=new TableColumn("机型");
        tc_5=new TableColumn("机号");
        tc_6=new TableColumn("航线信息");
        tc_1.setSortable(false);
        tc_2.setSortable(false);
        tc_3.setSortable(false);
        tc_4.setSortable(false);
        tc_5.setSortable(false);
        tc_6.setSortable(false);
        tc_1.setCellValueFactory(new PropertyValueFactory("interfacetype"));
        tc_2.setCellValueFactory(new PropertyValueFactory("come_go"));
        tc_3.setCellValueFactory(new PropertyValueFactory("flightName"));
        tc_4.setCellValueFactory(new PropertyValueFactory("carftType"));
        tc_5.setCellValueFactory(new PropertyValueFactory("carftNo"));
        tc_6.setCellValueFactory(new PropertyValueFactory("route"));
        table.getColumns().addAll(tc_1,tc_2,tc_3,tc_4,tc_5,tc_6);
    }
    public void init(){
        flightDate=LocalDateConvert.LocalDateToUdate(HandleInterfaceDataFront.datePicker.getValue());
        interfaceDtos=FXCollections.observableArrayList(FimsServiceFactory.getService(IFimsConfigQueryService.class).loadInterfaceAll());

        if (interfaceDtos == null) {
            interfaceDtos =FXCollections.observableArrayList();
        }else{
            for(InterfaceDto interfaceDto : interfaceDtos){
                if(FimsConst.INTERFACE_DYNTELEX.equals(interfaceDto.getName())){
                    interfaceDtos.remove(interfaceDto);//排除动态电报接口
                    break;
                }
            }
        }
        StringBuffer ifDataIdStr = new StringBuffer();

        if(HandleInterfaceDataFront.hx){
            ifDataIdStr.append(interfaceDtos.get(0).getId()).append(",");
        }
        if(HandleInterfaceDataFront.kg){
            ifDataIdStr.append(interfaceDtos.get(1).getId()).append(",");
        }
        ifIdStr=ifDataIdStr.toString();

    }
    public void loadtable(Date flightDate) {

        if("".equals(ifIdStr)||ifIdStr==null){
            return ;
        }else{
            String[] ifIds = ifIdStr.split(",");
            ifParsedDataDtos=FXCollections.observableArrayList();
            interfaceDataVos=FXCollections.observableArrayList();
            ifParsedDataDtos.clear();
            interfaceDataVos.clear();
            if(table.getItems()!=null&&table.getItems().size()!=0){
                table.getItems().clear();
            }
            for(String interfaceId : ifIds){
                List temp = FimsServiceFactory.getService(IFimsPlanQueryService.class).loadIfParsedData(flightDate,Long.parseLong(interfaceId));

                if( temp!= null&&!temp.isEmpty()){
                    ifParsedDataDtos.addAll(temp);
                }
            }
            if (ifParsedDataDtos.isEmpty()) {
                ifParsedDataDtos = FXCollections.observableArrayList();
            }
            if(interfaceDataVos.isEmpty()){
                interfaceDataVos=FXCollections.observableArrayList();
            }
            for (IfParsedDataDto idd : ifParsedDataDtos) {
                InterfaceDataVo idv=new InterfaceDataVo();
                idv.setCarftNo(idd.getCraftNo());
                idv.setCarftType(idd.getCraftType());
                idv.setFlightName(idd.getFlightName());
                idv.setInterfacetype(idd.getInterfaceName());
                idv.setRoute(idd.getRoute());
                if(idd!=null&&idd.isArrFlight()!=null){
                    idv.setCome_go(idd.isArrFlight()?"进":"出");
                }

                interfaceDataVos.add(idv);
            }
            table.setItems(interfaceDataVos);

            for (IfParsedDataDto ifParsedDataDto : ifParsedDataDtos) {
                if(ifParsedDataDto.isArrFlight()==null){
                    continue;
                }else if(ifParsedDataDto.isArrFlight()){
                    inCount++;
                }else{
                    outCount++;
                }
            }
            sumCount = inCount + outCount;
        }
    }
    public String getIfIdStr() {
        return ifIdStr;
    }
    public void setIfIdStr(String ifIdStr) {
        this.ifIdStr = ifIdStr;
    }




}
import java.util.Date;

import com.sun.glass.ui.Window;

import controller.FPcontroller;
import javafx.scene.Scene;
import javafx.scene.control.ButtonType;
import javafx.stage.Modality;
import javafx.stage.Stage;
import util.MessageDialogInfo;

/**
 * 接口数据处理
 * @author 赵乔石
 *
 */
public class HandleInterfaceDataDialog {
    static Stage stage;
    static Date date;
    public HandleInterfaceDataDialog() {
        super();
        date=FPcontroller.date;
        if(date.before(new Date())){
            MessageDialogInfo.openWarning("提示", "计划日期应该大于当前日期", null, ButtonType.OK);
            return;
        }
        stage=new Stage();
        stage.initModality(Modality.APPLICATION_MODAL);
        stage.setTitle("接口数据处理");
        stage.setResizable(false);


        stage.setScene(new Scene(new HandleInterfaceDataWizardUtil(stage,date), 600, 400));
        stage.show();
    }
}

你可能感兴趣的:(javafx)