java - javafx 事件处理程序返回错误我不完全理解
问题描述
我对 Javafx 相当陌生,并试图理解我遇到的错误。创建事件处理程序时,程序返回错误:错误:(56、94)java:->预期。
主.java
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Credit Card Input");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Controller.java
package sample;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
public class Controller{
@FXML
TextField creditCardNo;
@FXML
TextField expDate;
@FXML
TextField ccvInput ;
@FXML
String imageOutput = new String("default.png");
public String ccvCheck(Object ccvInput){
String ccInput = this.ccvInput.getText();
char[] intArray = ccInput.toCharArray();
StringBuilder doubleDigitCheck = new StringBuilder();
doubleDigitCheck.append(intArray[0]).append(intArray[1]);
String str = new String(doubleDigitCheck);
int checkValue = Integer.parseInt(String.valueOf(intArray[0]));
String str2 = ccInput.substring(0,1);
if (str.matches("34")) {
return imageOutput = new String("amex.png");
}
if (str.matches("35")) {
return this.imageOutput = new String("jcb.png");
}
if (str.matches("37")) {
return this.imageOutput = new String("amex.png");
}
if (str2.matches("4")) {
return this.imageOutput = new String("visa.png");
}
if (str2.matches("5")) {
return this.imageOutput = new String("mastercard.png");
} else return this.imageOutput = new String("default.png");
}
public TextField getCcvInput() {
return ccvInput;
}
EventHandler<? super KeyEvent> eventHandler= ccvInput.setOnKeyReleased(eventHandler -> () { ccvCheck(ccvInput); });
//TODO:Set event handler to run checkValue and link to ccvInput
}
示例.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<GridPane prefHeight="119.0" prefWidth="321.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1">
<columnConstraints>
<ColumnConstraints />
<ColumnConstraints maxWidth="160.5" minWidth="160.5" prefWidth="160.5" />
<ColumnConstraints maxWidth="0.0" minWidth="0.0" prefWidth="0.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints minHeight="10.0" prefHeight="10.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="10.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="10.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TextField fx:id="creditCardNo" GridPane.rowIndex="1" />
<TextField fx:id="expDate" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<TextField fx:id="ccvInput" onAction="#eventHandler" GridPane.rowIndex="3"/>
<ImageView fx:id="imageOutput" fitHeight="72.0" fitWidth="105.0" opacity="0.0" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="1" GridPane.rowIndex="3">
<image>
<Image url="@../../visa.png" />
</image></ImageView>
<Label text="Credit Card Number" />
<Label text="Exp Date" GridPane.columnIndex="1" />
<Label text="CCV" GridPane.rowIndex="2" />
</children>
</GridPane>
我正在尝试设置事件处理程序,以便当用户在 CVV 字段(TextField ccvInput)中输入数字时,会选择一个图像。目前收到错误,据我了解。他们的语法是正确的。非常感谢任何帮助理解这一点。
解决方案
这不是创建EventHandler
. 您可以使用 lambdaEventHandler
直接在setOnKeyReleased()
方法内定义:
ccvInput.setOnKeyReleased(event -> {
ccvCheck(ccvInput.getText());
});
但是,您可能会在代码中遇到许多其他问题,并且您可能需要重新考虑您的结构和流程。
推荐阅读
- php - laravel Eloquent 有和没有实例
- github - 如何在 Github markdown 中使用复选框?
- angular - 如何从网页读取http请求
- postgresql - Postgresql:如果存在,则回滚到保存点
- python - 转换为集合理解
- c# - 在后面的代码中无法识别 aspx 元素 (asp.net)
- sql - 在Oracle SQL中,如何快速找出表列表中的行数和列数?
- regex - (正则表达式)没有 For 每个循环的 MatchCollection
- swift - 为什么基本的 Swift 代码会导致内存泄漏?
- xamarin - 如何更改所选选项卡的字体图标颜色?