为自定义UI元素JavaFX构建Jar

时间:2015-01-05 17:32:24

标签: java javafx fxml scenebuilder

我按照以下博客的步骤进行了操作,但无论何时构建对话框,都无法使用netbeans创建jar这样的

enter image description here

我所关注的博客:

Adding a Custom JavaFX Component to Scene Builder 2.0

该项目包含以下三个文件

i)FXML文件 ii)控制器类 iii)样式表

以下是项目的树状视图:

enter image description here

1 个答案:

答案 0 :(得分:0)

我似乎错过了一个主要课程,您可以在其中加载fxml并设置并显示场景。 在NetBeans中,使用“运行/构建项目”(F11)来编译和创建jar文件。 使用运行/运行项目(F6)编译和运行项目。为此你需要一个主要的课程。

链接中的教程适合我。我做了以下几点:

  • 创建项目'Stackoverflow'(图书馆)
  • 创建项目'Stackoverflow2'(使用该库的主应用程序)。 'Stackoverflow2'使用库'Stackoverflow',你可以在'Libraries'节点下面看到。

NetBeans

文件StackOverflow2.java的内容:

package stackoverflow2;

import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class StackOverflow2 extends Application {

    @Override
    public void start(Stage primaryStage) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("DemoScreen.fxml"));
        Scene scene = new Scene(root, 600, 400);
        primaryStage.setTitle("stackoverflow");
        primaryStage.setScene(scene);

        primaryStage.show();
    }

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

文件内容DemoScreenController:

package stackoverflow2;

import javafx.fxml.FXML;
import stackoverflow.CommodityImageLabel;

public class DemoScreenController {

    @FXML
    protected CommodityImageLabel commodityLabel1;
}

文件内容DemoScreen.fxml:

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

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

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" 
            prefHeight="321.0" prefWidth="543.0" xmlns="http://javafx.com/javafx/8" 
            xmlns:fx="http://javafx.com/fxml/1" fx:controller="stackoverflow2.DemoScreenController">
   <children>
      <Label layoutX="72.0" layoutY="34.0" text="Main App" />
      <Separator layoutX="24.0" layoutY="78.0" prefHeight="1.0" prefWidth="499.0" />
      <CommodityImageLabel layoutX="43.0" layoutY="98.0" />
   </children>
</AnchorPane>

StackOverflow.java的内容:

package stackoverflow;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class StackOverflow extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

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

        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

我没有关注功能 - 因此代码非常基本。