我習慣了Swing,並且正在探索javafx。在swing中,我會創建一個擴展Jpanel的類,然後可以在該類中創建一個JFrame的幾行代碼來測試該類。javafx匿名應用程序類
所以在JavaFX的,我想我可能只是延長場景或組,然後就可以在主創建一個匿名的應用程序類,但失敗有:
異常在線程「主」了java.lang.RuntimeException:錯誤:類test.Test不在javafx.application.Application.launch(Application.java:211) javafx.application.Application 的一個子類在test.Test.main(Test.java:59)
我不想爲應用程序子類化,因爲我想按照這種模式處理大量的場景/組,並且只能有一個應用程序對象。
當這沒有奏效時,我想我可以編寫一個簡單的類來擴展Application,然後根據提供的參數,使用反射來創建我的場景,但這不起作用,因爲沒有默認的構造函數一個場景...... Group有一個默認的構造函數,所以也許我需要繼承而不是Scene?
必須有一種方法來做到這一點...這一直是一種測試和個人課程的java 101方法。有沒有人曾經這樣做過?關於如何完成我在這裏要做的事情的任何想法或想法?
Java版本 「1.7.0_21」
的Java(TM)SE運行時環境(建立1.7.0_21-B11)
爪哇熱點(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);
}
}