javafx анонимный класс приложения
Я привык к Swing и изучаю javafx. В разгареd создать класс, расширяющий Jpanel, и затем иметь возможность протестировать этот класс с помощью пары строк кода в том классе, который создал JFrame.
Так что в javafx я подумал, что могу просто расширить Scene или Group, а затем создать анонимный класс Application в main, но это невозможно:
Исключение в теме "главный" java.lang.RuntimeException: Ошибка: класс test.Test не является подклассом javafx.application.Application в javafx.application.Application.launch (Application.java:211) в test.Test.main (Test.java:59)
Я нея не хочу создавать подклассы Application, поскольку я хочу следовать этому шаблону для множества сцен / групп, и может быть только один объект Application.
Когда это неЯ подумал, что смогу написать простой класс, который расширяет Application и затем на основе предоставленных аргументов использует отражение для создания моей сцены, но это неЭто тоже не работает, так как для сцены нет конструктора по умолчанию ... В группе есть конструктор по умолчанию, так что, может быть, мне нужно создать его подкласс вместо Scene?
Должен быть способ сделать это ... это всегда был способ тестирования java 101 и отдельный класс. Кто-нибудь когда-нибудь делал это? Любые мысли или идеи о том, как достичь того, что яя пытаюсь сделать здесь?
Java-версия "1.7.0_21"
Java (TM) SE Runtime Environment (сборка 1.7.0_21-b11)
Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 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 );
}
}