1

私は Swing に慣れていて、javafx を調べています。スイングでは、Jpanel を拡張するクラスを作成し、JFrame を作成したそのクラス内の数行のコードでそのクラスをテストできるようにします。

したがって、javafxでは、シーンまたはグループを拡張して、メインで匿名のアプリケーションクラスを作成できると考えましたが、次のように失敗します:

スレッド「メイン」の例外 java.lang.RuntimeException: エラー: クラス test.Test は、test.Test.main( の javafx.application.Application.launch(Application.java:211) の javafx.application.Application のサブクラスではありませんTest.java:59)

多くのシーン/グループでこのパターンに従いたいので、Application をサブクラス化したくありません。 Application オブジェクトは 1 つしか存在できません。

それがうまくいかなかったとき、アプリケーションを拡張する単純なクラスを作成し、提供された引数に基づいてリフレクションを使用してシーンを作成できると考えましたが、シーンのデフォルトのコンストラクターがないため、それも機能しません.. . Group にはデフォルトのコンストラクターがあるので、Scene の代わりにそれをサブクラス化する必要があるのではないでしょうか?

これを行う方法があるに違いありません...これは常にJava 101のテスト方法と個々のクラスでした。誰もこれをやったことがありますか?私がここでやろうとしていることを達成する方法についての考えやアイデアはありますか?

Java バージョン "1.7.0_21"
Java(TM) SE ランタイム環境 (ビルド 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 );
   }
}
4

1 に答える 1