javafx匿名应用程序类

javafx匿名应用程序类,javafx,anonymous-inner-class,Javafx,Anonymous Inner Class,我习惯于摇摆,正在探索javafx。在swing中,我将创建一个扩展Jpanel的类,然后在创建JFrame的类中使用几行代码测试该类 因此,在javafx中,我认为我可以扩展场景或组,然后在main中创建一个匿名应用程序类,但失败的原因是: 线程“main”java.lang.RuntimeException中的异常:错误:类test.test不是javafx.application.application的子类 在javafx.application.application.launch(a

我习惯于摇摆,正在探索javafx。在swing中,我将创建一个扩展Jpanel的类,然后在创建JFrame的类中使用几行代码测试该类

因此,在javafx中,我认为我可以扩展场景或组,然后在main中创建一个匿名应用程序类,但失败的原因是:

线程“main”java.lang.RuntimeException中的异常:错误:类test.test不是javafx.application.application的子类 在javafx.application.application.launch(application.java:211) 位于test.test.main(test.java:59)

我不想对应用程序进行子类化,因为我想对许多场景/组遵循这种模式,并且只能有一个应用程序对象

当这不起作用时,我想我可以编写一个简单的类来扩展应用程序,然后基于提供的参数,使用反射来创建场景,但这也不起作用,因为场景没有默认构造函数。。。组有一个默认构造函数,所以也许我需要将其子类化,而不是场景

一定有办法做到这一点。。。这一直是一种Java101的测试和单个类的方法。有人这样做过吗?关于如何完成我在这里要做的事情,有什么想法吗

java版本“1.7.0_21”
Java(TM)SE运行时环境(build 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 );
   }
}

请注意,launch是一个静态方法,因此它不知道您正在对您创建的匿名应用程序实例调用它

我最好的想法是让代码看起来像这样:

public static void main(String [] args)
{
   Application.launch( MyApp.class, args );
}

public static class MyApp extends Application {
  public void start(Stage stage)
  {
          stage.setTitle( "Test" );
          Scene scene = new Test( new Group(), 450, 250);
          stage.setScene( scene );
          stage.show();
   }
 }