Java 调用从main方法扩展另一个类的类

Java 调用从main方法扩展另一个类的类,java,inheritance,bar-chart,overriding,Java,Inheritance,Bar Chart,Overriding,我有一门课,画一个条形图。我从这里得到了密码: 导入javafx.application.application; 导入javafx.scene.scene; 导入javafx.scene.chart.BarChart; 导入javafx.scene.chart.CategoryAxis; 导入javafx.scene.chart.NumberAxis; 导入javafx.scene.chart.XYChart; 导入javafx.stage.stage; 公共类BarChartSample扩

我有一门课,画一个条形图。我从这里得到了密码:

导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.chart.BarChart;
导入javafx.scene.chart.CategoryAxis;
导入javafx.scene.chart.NumberAxis;
导入javafx.scene.chart.XYChart;
导入javafx.stage.stage;
公共类BarChartSample扩展了应用程序{
最终静态字符串austria=“austria”;
最终静态字符串巴西=“巴西”;
最终静态字符串france=“france”;
最终静态字符串意大利=“意大利”;
最终静态字符串usa=“usa”;
@覆盖公共无效开始(阶段){
阶段。设置标题(“条形图样本”);
最终CategoryAxis xAxis=新CategoryAxis();
最终数字axis yAxis=新数字axis();
最终条形图bc=
新柱状图(xAxis、yAxis);
bc.setTitle(“国家概要”);
xAxis.setLabel(“国家”);
yAxis.setLabel(“值”);
XYChart.Series系列1=新的XYChart.Series();
系列1.集合名称(“2003”);
series1.getData().add(新的XYChart.Data(奥地利,25601.34));
series1.getData().add(新的XYChart.Data(巴西,20148.82));
series1.getData().add(新的XYChart.Data(法国,10000));
series1.getData().add(新的XYChart.Data(意大利,35407.15));
series1.getData().add(新的XYChart.Data(美国,12000));
XYChart.Series系列2=新的XYChart.Series();
序列2.集合名称(“2004”);
series2.getData().add(新的XYChart.Data(奥地利,57401.85));
series2.getData().add(新的XYChart.Data(巴西,41941.19));
series2.getData().add(新的XYChart.Data(法国,45263.37));
series2.getData().add(新的XYChart.Data(意大利,117320.16));
series2.getData().add(新的XYChart.Data(美国,14845.27));
XYChart.Series系列3=新的XYChart.Series();
系列3.集合名称(“2005”);
series3.getData().add(新的XYChart.Data(奥地利,45000.65));
series3.getData().add(新的XYChart.Data(巴西,44835.76));
series3.getData().add(新的XYChart.Data(法国,18722.18));
series3.getData().add(新的XYChart.Data(意大利,17557.31));
series3.getData().add(新的XYChart.Data(美国,92633.68));
场景=新场景(bc,800600);
bc.getData().addAll(系列1、系列2、系列3);
舞台场景;
stage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}

但问题是我想从另一个类中的主方法调用这个BarChartSample类。
例如,我有一个名为BookRecommender的类,并且有一个main方法。我希望能够设置参数,例如title、xlabel、ylabel以及这个BarChartSample类的值。但是我不能从我的Recommender类运行BarChartSample类的start方法

这是一个JavaFX应用程序,因此您不会直接从另一个类调用该类。您需要将这个类的功能封装在一个类中,然后从JavaFX应用程序调用它

例如,您可以将场景子类化以创建特定的BarChartScene,然后在构造函数或方法setData中传递所需的数据([您希望传递的数据])。或者可以创建一个BarChartSceneFactory类,该类将返回场景对象

例如。 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;
    }
}
然后,您可以在主示例应用程序中简单地调用SceneFactory.getBarChartScene(),以获取场景对象并将其设置在舞台上

如果希望显示自己的自定义数据,则将其作为参数传递给getScene方法,例如,
Map chartData
,其中第一个整数包含年份,它映射到国家名称到值的映射

或者你也可以将场景分为子类,并以这种方式进行

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

这是一个JavaFX应用程序,因此您不会直接从另一个类调用这个类。您需要将这个类的功能封装在一个类中,然后从JavaFX应用程序调用它

例如,您可以将场景子类化以创建特定的BarChartScene,然后在构造函数或方法setData中传递所需的数据([您希望传递的数据])。或者可以创建一个BarChartSceneFactory类,该类将返回场景对象

例如。 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;
    }
}
然后,您可以在主示例应用程序中简单地调用SceneFactory.getBarChartScene(),以获取场景对象并将其设置在舞台上

如果希望显示自己的自定义数据,则将其作为参数传递给getScene方法,例如,
Map chartData
,其中第一个整数包含年份,它映射到国家名称到值的映射

或者你也可以将场景分为子类,并以这种方式进行

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

您的主类是否也扩展了应用程序?如果是这样,我会修改您的代码,这样它就不会扩展应用程序。您可以添加方法来修改所需的任何数据。您甚至可以将所需的代码复制并粘贴到应用程序中。

您的主类是否也扩展了应用程序?如果是这样,我会修改您的代码,这样它就不会扩展应用程序。您可以添加方法来修改所需的任何数据。您甚至可以将所需的代码复制并粘贴到应用程序中。

您可以修改BarChartSample类,还是必须保持当前状态?您可以根据自己的想法进行修改。我只想用条形图的功能为我画一张图表。好的,听起来你想让别人为你做这项工作。这并不是堆栈溢出的真正目的。根据这个例子,试着自己制作这个类,如果你对所说的类有问题,可以随意问另一个问题。你能修改BarChartSample类吗?或者它必须保持目前的状态吗?你可以按照你认为更好的方式修改。我只想用条形图的功能为我画一张图表。好的,听起来你想让别人为你做这项工作。这并不是堆栈溢出的真正目的。根据这个例子,试着自己制作这个课程,如果你对所说的课程有问题,请放心