обработчик события javafx, возвращающий ошибку, я не полностью понимаю - PullRequest
0 голосов
/ 09 марта 2020

Я довольно новичок в Javafx и пытаюсь понять, какую ошибку я получаю. При создании обработчика событий программа возвращает ошибку: ошибка: (56, 94) java: -> ожидается.

Main. 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


}

sample.f xml

<?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), изображение выбрано. В данный момент получаю ошибку, которая из моего понимания. У них синтаксис правильный. Любая помощь в понимании этого очень ценится.

1 Ответ

1 голос
/ 09 марта 2020

Это не правильный способ создания EventHandler. Вы можете использовать лямбду для определения EventHandler непосредственно в методе setOnKeyReleased():

ccvInput.setOnKeyReleased(event -> {
    ccvCheck(ccvInput.getText());
});

Однако вы, вероятно, столкнетесь со многими другими проблемами в вашем коде и, возможно, захотите переосмыслить свою структуру. и поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...