簡體   English   中英

調用從主方法擴展另一個類的類

[英]Call a class that extends another class from main method

所以我有一堂課,繪制條形圖。 我從這里得到代碼:

https://docs.oracle.com/javafx/2/charts/bar-chart.htm

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;

public class BarChartSample extends Application {
final static String austria = "Austria";
final static String brazil = "Brazil";
final static String france = "France";
final static String italy = "Italy";
final static String usa = "USA";

@Override public void start(Stage stage) {
    stage.setTitle("Bar Chart Sample");
    final CategoryAxis xAxis = new CategoryAxis();
    final NumberAxis yAxis = new NumberAxis();
    final BarChart<String,Number> bc = 
        new BarChart<String,Number>(xAxis,yAxis);
    bc.setTitle("Country Summary");
    xAxis.setLabel("Country");       
    yAxis.setLabel("Value");

    XYChart.Series series1 = new XYChart.Series();
    series1.setName("2003");       
    series1.getData().add(new XYChart.Data(austria, 25601.34));
    series1.getData().add(new XYChart.Data(brazil, 20148.82));
    series1.getData().add(new XYChart.Data(france, 10000));
    series1.getData().add(new XYChart.Data(italy, 35407.15));
    series1.getData().add(new XYChart.Data(usa, 12000));      

    XYChart.Series series2 = new XYChart.Series();
    series2.setName("2004");
    series2.getData().add(new XYChart.Data(austria, 57401.85));
    series2.getData().add(new XYChart.Data(brazil, 41941.19));
    series2.getData().add(new XYChart.Data(france, 45263.37));
    series2.getData().add(new XYChart.Data(italy, 117320.16));
    series2.getData().add(new XYChart.Data(usa, 14845.27));  

    XYChart.Series series3 = new XYChart.Series();
    series3.setName("2005");
    series3.getData().add(new XYChart.Data(austria, 45000.65));
    series3.getData().add(new XYChart.Data(brazil, 44835.76));
    series3.getData().add(new XYChart.Data(france, 18722.18));
    series3.getData().add(new XYChart.Data(italy, 17557.31));
    series3.getData().add(new XYChart.Data(usa, 92633.68));  

    Scene scene  = new Scene(bc,800,600);
    bc.getData().addAll(series1, series2, series3);
    stage.setScene(scene);
    stage.show();
}

public static void main(String[] args) {
    launch(args);
}

}

但是問題是我想從另一個類的主要方法中調用此BarChartSample類。 例如,我有一個名為BookRecommender的類,並且有一個main方法。 我希望能夠設置參數,例如title,xlabel,ylabel以及該BarChartSample類的值。 但是我無法從我的Recommender類中運行BarChartSample類的start方法。

這是一個JavaFX應用程序,因此您不會直接從另一個類調用該類。 您需要將此類的功能封裝在一個類中,然后從JavaFX應用程序中調用它。

例如,您可以將Scene子類化以創建特定的BarChartScene,然后在構造函數中傳遞所需的數據或方法setData([希望傳遞的數據])。 或者,您可以創建一個BarChartSceneFactory類,該類將返回一個Scene對象。

例如SceneFactory.java

import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;

public abstract class SceneFactory {
    private static final String AUSTRIA = "Austria";
    private static final String BRAZIL = "Brazil";
    private static final String FRANCE = "France";
    private static final String ITALY = "Italy";
    private static final String USA = "USA";

    public static Scene getBarChartScene() {
        final CategoryAxis xAxis = new CategoryAxis();
        final NumberAxis yAxis = new NumberAxis();
        final BarChart<String,Number> bc = new BarChart<String,Number>(xAxis,yAxis);
        bc.setTitle("Country Summary");
        xAxis.setLabel("Country");     
        yAxis.setLabel("Value");

        XYChart.Series series1 = new XYChart.Series();
        series1.setName("2003");       
        series1.getData().add(new XYChart.Data(AUSTRIA, 25601.34));
        series1.getData().add(new XYChart.Data(BRAZIL, 20148.82));
        series1.getData().add(new XYChart.Data(FRANCE, 10000));
        series1.getData().add(new XYChart.Data(ITALY, 35407.15));
        series1.getData().add(new XYChart.Data(USA, 12000));      

        XYChart.Series series2 = new XYChart.Series();
        series2.setName("2004");
        series2.getData().add(new XYChart.Data(AUSTRIA, 57401.85));
        series2.getData().add(new XYChart.Data(BRAZIL, 41941.19));
        series2.getData().add(new XYChart.Data(FRANCE, 45263.37));
        series2.getData().add(new XYChart.Data(ITALY, 117320.16));
        series2.getData().add(new XYChart.Data(USA, 14845.27));  

        XYChart.Series series3 = new XYChart.Series();
        series3.setName("2005");
        series3.getData().add(new XYChart.Data(AUSTRIA, 45000.65));
        series3.getData().add(new XYChart.Data(BRAZIL, 44835.76));
        series3.getData().add(new XYChart.Data(FRANCE, 18722.18));
        series3.getData().add(new XYChart.Data(ITALY, 17557.31));
        series3.getData().add(new XYChart.Data(USA, 92633.68));  

        Scene scene  = new Scene(bc,800,600);
        bc.getData().addAll(series1, series2, series3);
        return scene;
    }
}

MainApp.java

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MainApp extends Application {
    @Override
    public void start(Stage stage) {
        Scene scene = SceneFactory.getBarChartScene();
        stage.setScene(scene);
        stage.setTitle("Bar Chart Sample");
        stage.show();
    }
}

然后,您可以在主示例應用程序中簡單地調用SceneFactory.getBarChartScene()以獲取一個Scene對象並將其設置在舞台上。

如果您希望顯示自己的自定義數據,則將其作為參數傳遞給getScene方法,例如Map<Integer, Map<String, Double>> chartData ,其中第一個整數保存年份,該年份映射到國家名稱的映射價值觀。

或者,您也可以繼承Scene並以這種方式進行操作,例如

public class BarChartScene extends Scene {
    public BarChartScene([pass some data in here]) {
        // Build your scene based on the data passed in the constructor.
    }
}

您的主要班級也擴展了Application嗎? 如果是這樣,我將修改您的代碼,以免擴展應用程序。 您可以添加方法來修改所需的任何數據。 您甚至可以將所需的代碼復制並粘貼到應用程序中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM