【问题标题】:Trying to set up an "onshowing" ActionEvent in Combobox in javafx尝试在 javafx 的 Combobox 中设置“onshowing”ActionEvent
【发布时间】:2016-06-06 23:17:17
【问题描述】:

我正在使用 Scene Builder 构建 javafx gui,并且我想要一个 ComboBox,其中“显示时”会发生某些事情。它看起来很简单,但是当我尝试实现它时它会崩溃。我创建了一个只有组合框的简单版本,但它仍然崩溃。

这里是 Main.java 模块:

package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
//          BorderPane root = new BorderPane();
            BorderPane root = (BorderPane) FXMLLoader.load(Main.class.getResource("Comboscreen.fxml"));

            Scene scene = new Scene(root,400,400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

这是 fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>

<BorderPane xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
   <center>
      <VBox alignment="CENTER" prefHeight="400.0" prefWidth="400.0" BorderPane.alignment="CENTER">
         <children>
            <ComboBox fx:id="ComboTestBox" onAction="#ComboDo" onShowing="#Showaction" prefWidth="150.0" promptText="Testbox" />
         </children>
      </VBox>
   </center>
</BorderPane>

这里是控制器:

package application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;

public class Controller {

    @FXML
    public ComboBox<String> ComboTestBox;

    @FXML
    void ComboDo(ActionEvent event) {
        System.out.println(" Option Chosen");

    }

    ObservableList<String> options = 
            FXCollections.observableArrayList(
                "Option 1",
                "Option 2",
                "Option 3"
            );

    @FXML
  void Showaction(ActionEvent event) {
        System.out.println(" TestAction");
    }



    public void initialize() {
    ComboTestBox.setItems(options); 
    }       


}

看起来很简单,但每次都会崩溃。如果我删除“onshowing”操作,它就可以正常工作。任何建议都值得赞赏,因为我对此很陌生。

【问题讨论】:

  • 它“崩溃”了?或者你得到一个例外?

标签: javafx combobox actionevent


【解决方案1】:

假设“崩溃”是指它给您一个运行时异常(供将来参考,请在您的问题中包含stack trace,其中包含大量信息供您诊断问题):

onShowing 处理程序是 EventHandler&lt;Event&gt;,而不是 EventHandler&lt;ActionEvent&gt;,因此您需要:

@FXML
void Showaction(Event event) {
    System.out.println(" TestAction");
}

请注意,如果您不使用Event 参数,您可以省略它,FXMLLoader 仍然能够映射到正确的处理程序方法:

@FXML
void Showaction() {
    System.out.println(" TestAction");
}

但是,如果包含参数,则它必须是正确的类型。

顺便说一句,您应该使用正确的命名约定,即

@FXML
void showAction(Event event) {
    System.out.println(" TestAction");
}

对您的 FXML 文件进行相应的更改。

【讨论】:

  • 非常感谢。您的修复程序立即生效。当我在显示时选择要发生的动作时,场景生成器生成的示例控制器骨架包括我使用的 ActionEvent。这是 Scene Builder 中的错误吗?
  • 是的,我会这么说。我从未使用过示例控制器骨架(我倾向于在编写视图之前编写控制器)。
猜你喜欢
  • 1970-01-01
  • 2014-04-07
  • 2021-04-02
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
相关资源
最近更新 更多