Сборка Jar для пользовательского элемента пользовательского интерфейса JavaFX

Я следовал шагам следующего блога, но не могу создать банку с использованием netbeans всякий раз, когда я собираюсь создать диалоговое окно, похожее на это

введите здесь описание изображения

Блог, за которым я следил:

Добавление пользовательского компонента JavaFX в Scene Builder 2.0

Проект содержит следующие три файла

i) файл FXML ii) класс контроллера iii) таблица стилей

Вот дерево проекта:

введите здесь описание изображения


person Biswadip Dey    schedule 05.01.2015    source источник


Ответы (1)


Мне кажется, вы пропустили основной класс, где вы загружаете свой fxml, устанавливаете и показываете сцену. В NetBeans используйте Run/Build Project (F11) для компиляции и создания jar-файла. Используйте Run/Run Project (F6) для компиляции и запуска вашего проекта. Для этого вам нужен основной класс.

Учебник по ссылке работает для меня. Я сделал следующее:

  • создать проект "Stackoverflow" (библиотека)
  • создать проект «Stackoverflow2» (основное приложение, использующее библиотеку). «Stackoverflow2» использует библиотеку «Stackoverflow», как вы можете видеть под узлом «Библиотеки».

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);
    }
}

Я не позаботился о функциональности, так что код очень простой.

person chris    schedule 05.01.2015
comment
Когда я добавляю основной класс в вышеуказанный проект, я могу его построить. Но когда я собираюсь импортировать его в конструктор сцен, он показывает пустую страницу. Не могли бы вы поделиться содержимым StackOverflow.java? - person Biswadip Dey; 06.01.2015
comment
Вы пытались импортировать это в Scene Builder? Когда я собираюсь это сделать, он показывает мне диалоговое окно импорта с нулевыми элементами, поэтому я не могу его импортировать. - person Biswadip Dey; 06.01.2015
comment
Я импортировал файл jar из своего проекта StackOverflow. И да, это сработало. Вы можете скачать два моих проекта с моего гугл диска. Это ссылка: drive.google.com/file/d/0BxbJ93hsw2hkcC1HSGllV1FRdU0 / - person chris; 06.01.2015