Я привык к Swing и изучаю javafx. В swing я бы создал класс, который расширяет Jpanel, а затем сможет тестировать этот класс с несколькими строками кода в этом классе, который создал JFrame.javafx Anonymous Класс приложения
Так что в JavaFX я думал, что я мог бы просто расширить сцену или группу, а затем быть в состоянии создать анонимный класс Application в основном, но это не удается с:
Исключения в потоке «главный» java.lang.RuntimeException: Ошибка: класс test.Test не подкласс javafx.application.Application в javafx.application.Application.launch (Application.java:211) в test.Test.main (Test.java:59)
Я не хочу подклассифицировать приложение, поскольку я хочу следовать этому шаблону для множества сцен/групп, и может быть только один объект приложения.
Когда это не сработало, я подумал, что могу написать простой класс, который расширяет приложение, а затем основывается на предоставленных аргументах, использует отражение для создания моей сцены, но это не сработает, поскольку нет конструктора по умолчанию для сцена ... У группы есть constuctor по умолчанию, так что, возможно, мне нужно подклассы, чтобы вместо Scene?
Должен быть способ сделать это ... это всегда был способ java 101 для тестирования и индивидуальный класс. Кто-нибудь когда-либо делал это? Любые мысли или идеи о том, как выполнить то, что я пытаюсь сделать здесь?
ява версия "1.7.0_21"
Java (TM) SE Runtime Environment (сборка 1.7.0_21-b11)
Java HotSpot (TM) 64-разрядного сервера VM (сборка 23.21-b01, смешанный режим)
Вот мой код:
package test;
import javafx.application.*;
import javafx.geometry.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.*;
import javafx.scene.input.*;
import javafx.scene.effect.*;
public class Test extends javafx.scene.Scene
{
public Test(javafx.scene.Group group, int width, int height)
{
super(group, width, height);
GridPane grid = new GridPane();
grid.setVgap(4);
grid.setHgap(10);
grid.setPadding(new Insets(5, 5, 5, 5));
final Button button = new Button ("Ok");
final Label notification = new Label();
final TextField subject = new TextField("");
final TextArea text = new TextArea ("");
final ComboBox priorityComboBox = new ComboBox();
priorityComboBox.getItems().addAll("Highest", "High", "Normal", "Low", "Lowest");
priorityComboBox.setValue("Normal");
grid.add(new Label("Priority: "), 0, 0);
grid.add(priorityComboBox, 1, 0);
grid.add(new Label("Subject: "), 0, 1);
grid.add(subject, 1, 1, 3, 1);
grid.add(text, 0, 2, 4, 1);
grid.add(button, 0, 3);
group.getChildren().add(grid);
}
public static void main(String [] args)
{
Application app = new Application()
{
public void start(Stage stage)
{
stage.setTitle("Test");
Scene scene = new Test(new Group(), 450, 250);
stage.setScene(scene);
stage.show();
}
};
app.launch(args);
}
}