Button不会在JavaFX中响应

时间:2013-10-24 10:34:13

标签: java button javafx-2 scenebuilder

我在 JavaFX& Scene Builder 试图让一个按钮在控制台中显示文本(只是为了看它是否正常工作),但它没有响应。我不知道它为什么不开火。我的按钮ID为fx:id="testButton

public class Main extends Application
{
    @FXML // fx:id=testButton
    final Button testButton = new Button("Test");

    private void actionListeners()
    {

        testButton.setOnAction(new EventHandler<ActionEvent>()
        {

            @Override
            public void handle(ActionEvent event) 
            {       
                System.out.println("Working");
            }

        });
    }

    @Override
    public void start(Stage primaryStage) throws IOException 
    {
        Parent page = FXMLLoader.load(Main.class.getResource("TestFXML.fxml"));
        Scene scene = new Scene(page);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Testing");
        primaryStage.show();

        actionListeners();
    }

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

2 个答案:

答案 0 :(得分:1)

@FXML标记表示FXML引擎将填充带注释的变量。因此,您不应该为该变量调用new Button()

通常fxml控制器有一个单独的类,它填充@FXML个变量和处理程序。请参阅此处的示例:https://blogs.oracle.com/jmxetc/entry/connecting_scenebuilder_edited_fxml_to

在您的示例中,您要么覆盖FXML创建的变量,要么未在.fxml文件中正确设置FXML Controller。提供fxml内容以检查后一种情况。

答案 1 :(得分:1)

您还可以直接为按钮操作注释处理程序,而无需显式调用...setOnAction(...)方法。这样做更容易一些,并删除了Java AWT / Swing中用于管理事件(例如您)所需的大量样板代码。

Oracle中的教程非常擅长解释这一点,但作为一个简单示例,您只需要将onAction="#handlingMethod"作为属性添加到按钮,然后将相应的@FXML public void handlingMethod(ActionEvent evt) {....}添加到控制器。例如:

<强> FXML

<Button onAction="#doATask" text="Do A Tas" />

控制器

@FXML public void doATask(ActionEvent evt) {....}

如上所述,您需要确保为FXML设置控制器(此时在FXML中声明它是最简单的,尽管您可以根据需要以编程方式设置它)。使用此方法,您甚至不需要对Button对象的引用来使用它,这有助于使代码更清晰。

这真的很简单,这也是我喜欢JavaFX在Swing或AWT开发之上的界限的原因之一。

祝你好运。

  • chooks