当前位置: 首页 > 知识库问答 >
问题:

在JavaFX中存储来自TextFields和ComboBox的输入?

东门清夷
2023-03-14

我正在制作一个基本的电影出租模拟器应用程序,我目前有一个问题,存储输入从我的文本字段和我的组合框到变量。我设法将大多数变量转换为字符串,但是当我试图打印输出以测试它时,它总是返回“null”。

我需要弄清楚如何从组合框中获取用户所做的选择并将其存储为字符串,我还需要弄清楚如何正确存储方法的结果。我以前从来没有遇到过这个问题,所以我真的不知道如何解决它。我的代码如下:

公共类RentGameDialogController扩展RentalStoreGuicController实现可初始化{

/** TextField Objects **/
@FXML private TextField nameField, rentedOnField, dueBackField;

/** String for NameField **/
String name, rentedOn, dueBack;

/** Game ComboBox ID's **/
@FXML private ObservableList<GameType> cbGameOptions;
@FXML private ComboBox<GameType> cbGame;

/** Console ComboBox ID's **/
@FXML private ObservableList<PlayerType> cbConsoleOptions;
@FXML private ComboBox<PlayerType> cbConsole;

/** GameType object **/
private GameType game;

/** PlayerType Object **/
private PlayerType console;

/** Button ID's **/
@FXML Button cancel, addToCart;

/** Counter for calculating total **/
int gameCounter;

/** Stage for closing GUI **/
private Stage currentStage;




@Override
public void initialize(URL location, ResourceBundle resources) {

    /** Select Console **/
    cbConsoleOptions = FXCollections.observableArrayList();
    for (PlayerType p : PlayerType.values()) { cbConsoleOptions.addAll(p); }
    cbConsole.getItems().addAll(cbConsoleOptions);

    /** Select Game **/
    cbGameOptions = FXCollections.observableArrayList();
    for (GameType g : GameType.values()){ cbGameOptions.addAll(g); }
    cbGame.getItems().addAll(cbGameOptions);

}

public String getName(){
    name = nameField.getText();

    try {

        String[] firstLast = name.split(" ");
        String firstName = firstLast[0];
        String lastName = firstLast[1];

    } catch (Exception e){
        e.printStackTrace();
    }

    return name;
}

public void getGame() {
    GameType gameChoice = cbGame.getSelectionModel().getSelectedItem();
}

public void getConsole() {
    PlayerType player = cbConsole.getSelectionModel().getSelectedItem();
}

public String getRentedOn() throws ParseException {

    rentedOn = rentedOnField.getText();


    DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    Date rentedOnDate = format.parse(rentedOn);

    Calendar cal = Calendar.getInstance();
    cal.setLenient(false);
    cal.setTime(rentedOnDate);

    try {

        cal.getTime();

    } catch (Exception e) {
        System.exit(0);
    }

    return rentedOn;

}

public String getDueBack() throws ParseException {

    dueBack = dueBackField.getText();


    DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    Date dueBackDate = format.parse(dueBack);

    Calendar cal = Calendar.getInstance();
    cal.setLenient(false);
    cal.setTime(dueBackDate);

    try {

        cal.getTime();

    } catch (Exception e) {
        System.exit(0);
    }

    return dueBack;

}

/*************************************
 * This is the method to call the other
 * String methods so their output can be
 * put into my main GUI
 *
 * Current problem: game.toString() and console.toString() throw an InvocationTargetException
 * @return
 * @throws ParseException
 *************************************/

public String storePurchaseData() throws ParseException {
    gameCounter++;                    //Problem               //Problem
    String toList = getName() + " " + game.toString() + " " + console.toString() + " " +
            getRentedOn() + " " + getDueBack();

    return toList; //Returns "null null null"
}


@FXML
public void handleCancelButtonAction (ActionEvent event) {
    currentStage = (Stage) cancel.getScene().getWindow();
    currentStage.close();
}

@FXML
public void addToCartButton (ActionEvent event) throws ParseException {
    System.out.println(storePurchaseData());
    currentStage = (Stage) cancel.getScene().getWindow();
    currentStage.close();
}}
public enum PlayerType {
Xbox360("Xbox 360"),
PS4("Playstation 4"),
XBoxOne("Xbox One"),
WiiU("Wii - U"),
PS3("Playstation 3"),
Wii("Nintendo Wii");

private String console;

PlayerType(String console) { this.console = console; }

public String PlayerType() { return console; }

@Override public String toString() { return console; }}

配子类型:

public enum GameType {
THE_WITCHER("The Witcher 3"),
CALL_OF_DUTY_AW("Call of Duty: Advanced Warfare"),
CALL_DUTY_BLOP3("Call of Duty: Black Ops 3"),
CALL_OF_DUTY_IW("Call of Duty: Infinite Warfare"),
THE_ELDER_SCROLLS("The Elder Scrolls IV: Skyrim");

private String game;

GameType(String game) {
    this.game = game;
}

public String GameType() { return game; }

@Override public String toString() { return game; }}

共有1个答案

程飞星
2023-03-14

返回所选值的唯一方法getname()

您正在使用的其余方法不返回任何内容

public void getGame()  //Void return type
{
    GameType gameChoice = cbGame.getSelectionModel().getSelectedItem();
}

所做的就是创建一个gametype对象,该对象只能在该方法内部访问。

public GameType getGame() //Instead of void, the type you are trying to get
{
    return cbGame.getSelectionModel().getSelectedItem();
}
GameType selectedGame = getGame();
public String getGame()
{
    return cbGame.getSelectionModel().getSelectedItem().toString();
}
 类似资料:
  • 我已经试着找到了答案,我觉得这与编码有关,但在多次尝试后,我都没有成功,我想在这里提问。抱歉,如果是重复的。 我有一个textarea输入字段存储在MySQL文本列中。当文本直接输入文本区域时,它会存储并显示良好。当它被输入Word,然后复制粘贴(这是我的用户坚持要做的),它会将撇号和双引号变成: 但是,我确信这是一个编码问题,因为如果我从命令行发出选择语句,它显示良好。只有当我通过网络(phpM

  • 我需要帮助,以获得一个指定的项目列表,并将它们添加到组合框。 我的观察列表包含从数据库接收的值(在特定的只有3列的表中),我想在组合框中只显示一个列值。选择组合框时,其他值在2个文本字段中收费。 代码如下。 导入Accettazioni模型: 重要信息控制器: 现在,逻辑似乎工作正常,但是我的组合框不包含值nomeProperty()。 我该如何解决? 预先感谢

  • 我正在尝试从包应用程序Oracle10g调用存储过程“GetGlobalParamValue org.springframework.boot版本“2.2.0.release” 当我在SQL developer中运行它时,一切正常我得到了正确的结果 我试过了 1. 或者2。 它不起作用 我得到一个错误:

  • 我有这个模型: 我试图有一个表行[String-String-ComboBox with Strings]。所以我像这样设置表格: 但结果是,我在第三列中没有看到任何组合框应该包含值“1”和“3”。相反,我看到的是: 我缺少什么来显示组合框?谢谢

  • 以前,我在Red Hat提供的Oracle Java SE中使用JavaFX开发应用程序,但似乎不再提供JavaFX了,如https://access.redhat.com/articles/3253281。然而,似乎来自rhel-7-server-rpms存储库的OpenJDK并不是JavaFX附带的。 是否有更好的方法来代替仅仅从Red Hat提供的存储库之外安装包?我不想用自编译的OpenJ

  • 我在Maven有一个内部的Nexus存储库,其中部署了一些插件。在nexus存储库中存在一些不存在的依赖jar文件。是否可以将maven配置为在内部存储库中搜索依赖jar文件,如果在maven中心存储库中不存在搜索。 使现代化 做出了与JimHawkins回答中类似的配置。但我仍然认为它只在nexus内部存储库中查找依赖项。以下是它打印的一些debus Messes: