0

我只是在学习一些非常基本的教程。我的环境是:Java 7 oracle SDK Netbeans 7.3.1 JavaFX SceneBuilder 1.1

我要求项目向导生成第一个 FXML,我称之为 main。

它上面有一个按钮和一个带有 fx id“标签”的标签。当我点击它时,标签被设置为“Hello, World!”。到目前为止,一切都很好。

我想做一些非常简单的事情:添加另一个带有 id "label2" 的标签并在我的控制器中添加按钮事件: label2.setText("something else");

然而这失败了。我不明白为什么。细节:

FXML:

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

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefHeight="200.0" prefWidth="320.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="fs2i.mainController">
  <children>
    <Button id="button" layoutX="14.0" layoutY="165.0" onAction="#handleClickMeButtonAction" text="Say Hi!" />
    <Label fx:id="label" layoutX="72.0" layoutY="120.0" minHeight="16.0" minWidth="69.0" />
    <Label fx:id="label2" layoutX="72.0" layoutY="41.0" prefWidth="88.0" />
    <Button id="Exit" layoutX="240.0" layoutY="165.0" mnemonicParsing="false" onAction="#handleExitButtonAction" text="Exit" />
  </children>
</AnchorPane>

控制器:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fs2i;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;

/**
 *
 * @author nicolas
 */
public class mainController implements Initializable {

    @FXML
    private Label label;

    @FXML 
    private Label label2;

    @FXML
    private void handleClickMeButtonAction(ActionEvent event) {
        System.out.println("You clicked me!");
        label.setText("Hello World!");
        label2.setText("Something else.");
    }

    @FXML
    private void handleExitButtonAction(ActionEvent event){
        Platform.exit();
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    
}

当我点击“Say Hi”按钮时的样子:

JavaFX 运行时 Hello World

日志:

You clicked me!
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1449)

当我在控制器中删除 label2 的迭代时,一切都会再次运行。

还有一些奇怪的事情,当我用初始文本“Init”初始化 label2 时,它在我启动应用程序时没有显示。

我正在寻求一些帮助,以阐明我可能做错了什么。

4

0 回答 0