[英]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.