Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数setOnKeyPressed在Javafx中的日期选择器上不起作用?_Javafx_Javafx 2_Javafx 8 - Fatal编程技术网

函数setOnKeyPressed在Javafx中的日期选择器上不起作用?

函数setOnKeyPressed在Javafx中的日期选择器上不起作用?,javafx,javafx-2,javafx-8,Javafx,Javafx 2,Javafx 8,函数setOnKeyPressed在日期选择器上不起作用。每当按下Enter键或Down键时,我想将焦点从第一个日期选择器(startYear)更改为第二个日期选择器(endyear),但它不起作用。 我尝试了以下代码。请帮帮我 package datedemo; import com.sun.javafx.robot.FXRobot; import com.sun.javafx.robot.FXRobotFactory; import java.time.LocalDate; import

函数setOnKeyPressed在日期选择器上不起作用。每当按下Enter键或Down键时,我想将焦点从第一个日期选择器(startYear)更改为第二个日期选择器(endyear),但它不起作用。 我尝试了以下代码。请帮帮我

package datedemo;

import com.sun.javafx.robot.FXRobot;
import com.sun.javafx.robot.FXRobotFactory;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 *
 * @author vikassingh
 */
public class DateDemo extends Application {

    DatePicker startYear = new DatePicker();
    DatePicker endYear = new DatePicker();

    @Override
    public void start(Stage primaryStage) {
        /* Button btn = new Button();
         btn.setText("Say 'Hello World'");
         btn.setOnAction(new EventHandler<ActionEvent>() {

         @Override
         public void handle(ActionEvent event) {
         System.out.println("Hello World!");
         }
         }); */

        // Year Start and END 
        int start_year = 0;
        int end_year = 0;
        Calendar cal = Calendar.getInstance();
        int year = cal.get(cal.YEAR);
        int month = cal.get(cal.MONTH) + 1; //zero-based
        System.out.println("year = " + year + "\nmonth = " + month);
        if (month < 4) {
            start_year = year - 1;
            end_year = year;
        } else {
            start_year = year;
            end_year = year + 1;
        }

        String start_year_date = "01/04/" + start_year;
        String end_year_date = "31/03/" + end_year;

        //Get Start & End Date;
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        LocalDate startDate = LocalDate.parse(start_year_date, formatter);
        LocalDate endDate = LocalDate.parse(end_year_date, formatter);

        VBox box = new VBox();
        VBox.setVgrow(box, Priority.ALWAYS);

        Label startYearLabel = new Label("Start Year * :");
        box.getChildren().add(startYearLabel);

        startYear.setValue(startDate);
        startYear.setPromptText("DD/MM/YYYY");
        box.getChildren().add(startYear);
        Label endYearLabel = new Label("End Year * :");
        box.getChildren().add(endYearLabel);
        endYear.setValue(endDate);
        endYear.setPromptText("DD/MM/YYYY");
        box.getChildren().add(endYear);

        StackPane root = new StackPane();
        root.getChildren().add(box);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Date Demo");
        primaryStage.setScene(scene);
        primaryStage.show();

        // Listner
        startYear.setOnKeyPressed(new EventHandler<KeyEvent>() {
            public void handle(KeyEvent event) {
                if (event.getCode() == KeyCode.ENTER || event.getCode() == KeyCode.TAB || event.getCode() == KeyCode.DOWN) {
                    endYear.requestFocus();
                    event.consume();
                }
                if (event.getCode() == KeyCode.UP) {
                    // do something
                    event.consume();
                }
            }
        });

        endYear.setOnKeyPressed(new EventHandler<KeyEvent>() {
            public void handle(KeyEvent event) {
                if (event.getCode() == KeyCode.ENTER || event.getCode() == KeyCode.TAB || event.getCode() == KeyCode.DOWN) {
                   // do something
                    event.consume();
                }
                if (event.getCode() == KeyCode.UP) {
                    startYear.requestFocus();
                    event.consume();
                }
            }
        });
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}
package-datedemo;
导入com.sun.javafx.robot.FXRobot;
导入com.sun.javafx.robot.FXRobotFactory;
导入java.time.LocalDate;
导入java.time.format.DateTimeFormatter;
导入java.util.Calendar;
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.DatePicker;
导入javafx.scene.control.Label;
导入javafx.scene.input.KeyCode;
导入javafx.scene.input.KeyEvent;
导入javafx.scene.layout.Priority;
导入javafx.scene.layout.StackPane;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
/**
*
*@作者vikassingh
*/
公共类DateDemo扩展了应用程序{
DatePicker startYear=新的日期选择器();
DatePicker endYear=新的日期选择器();
@凌驾
公共无效开始(阶段primaryStage){
/*按钮btn=新按钮();
btn.setText(“说‘你好,世界’”);
btn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
System.out.println(“你好,世界!”);
}
}); */
//年度开始和结束
int start_year=0;
int end_year=0;
Calendar cal=Calendar.getInstance();
int year=cal.get(cal.year);
int month=cal.get(cal.month)+1;//从零开始
System.out.println(“年=”+年+“\n月=”+月);
如果(月<4){
开始年份=第1年;
年末=年;
}否则{
开始年份=年;
年末=年+1;
}
字符串开始年份日期=“01/04/”+开始年份;
字符串end_year_date=“31/03/”+end_year;
//获取开始和结束日期;
DateTimeFormatter formatter=模式的DateTimeFormatter.of(“dd/MM/yyyy”);
LocalDate startDate=LocalDate.parse(开始日期、格式化程序);
LocalDate endDate=LocalDate.parse(end\u year\u date,格式化程序);
VBox box=新的VBox();
VBox.setVgrow(框,Priority.ALWAYS);
标签开始标签=新标签(“开始年份*:”;
box.getChildren().add(startYearLabel);
startYear.setValue(startDate);
startYear.setpromptext(“DD/MM/YYYY”);
box.getChildren().add(startYear);
标签endYearLabel=新标签(“年底*:”;
box.getChildren().add(endYearLabel);
endYear.setValue(endDate);
endYear.SetPrompText(“DD/MM/YYYY”);
box.getChildren().add(endYear);
StackPane root=新的StackPane();
root.getChildren().add(框);
场景=新场景(根,300,250);
primaryStage.setTitle(“日期演示”);
初级阶段。场景(场景);
primaryStage.show();
//利斯特纳
setOnKeyPressed(新的EventHandler(){
公共无效句柄(KeyEvent事件){
if(event.getCode()==KeyCode.ENTER | | event.getCode()==KeyCode.TAB | | event.getCode()==KeyCode.DOWN){
endYear.requestFocus();
event.consume();
}
if(event.getCode()==KeyCode.UP){
//做点什么
event.consume();
}
}
});
endYear.setOnKeyPressed(新的EventHandler(){
公共无效句柄(KeyEvent事件){
if(event.getCode()==KeyCode.ENTER | | event.getCode()==KeyCode.TAB | | event.getCode()==KeyCode.DOWN){
//做点什么
event.consume();
}
if(event.getCode()==KeyCode.UP){
startYear.requestFocus();
event.consume();
}
}
});
}
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
发射(args);
}
}
使用,i。e

一,。e


它有效,我试过了。我添加了过滤代码。使用光标向上/向下进行测试,因为这是使用示例代码时唯一可以双向工作的方法。
startYear.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
...
});

endYear.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
...
});
startYear.addEventFilter(KeyEvent.KEY_PRESSED, event -> {

        if (event.getCode() == KeyCode.ENTER || event.getCode() == KeyCode.TAB || event.getCode() == KeyCode.DOWN) {
            endYear.requestFocus();
            event.consume();
        }
        if (event.getCode() == KeyCode.UP) {
            // do something
            event.consume();
        }
});

endYear.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
        if (event.getCode() == KeyCode.ENTER || event.getCode() == KeyCode.TAB || event.getCode() == KeyCode.DOWN) {
           // do something
            event.consume();
        }
        if (event.getCode() == KeyCode.UP) {
            startYear.requestFocus();
            event.consume();
        }
});