如何从数据库中获取数据并将其放在fxml中?

时间:2016-04-15 08:46:21

标签: java sql javafx fxml

我正在制作一些关于我需要使用数据库的城市的信息应用程序,我已经准备好了数据库,并且还需要大部分代码;唯一的部分是将我需要的数据从我的SQL服务器提取到fxml中的BarChart。任何人都可以给我一个例子或什么?

我的fxml:

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="1000.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controllers.ControllerZW">
    <BarChart fx:id="graph" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
        <xAxis>
            <CategoryAxis side="BOTTOM" />
        </xAxis>
        <yAxis>
            <NumberAxis side="LEFT" />
        </yAxis>
    </BarChart>
</Pane>

我的控制器atm:

package Controllers;

public class ControllerZW implements Interface.Ibacktomenu {

    @Override
    public void backtomenu() {
        try {
            Main.mainStage.setScene(
                    new Scene(FXMLLoader.load(getClass().getResource("../scenes/MainMenu.fxml")))
            );
        } catch (IOException e) {
            System.out.println("Probably couldnt find resource file");
            e.printStackTrace();
        }
    }
}

2 个答案:

答案 0 :(得分:0)

是否要将数据表单数据库呈现为XML格式?

我认为某些模板引擎可能对您有所帮助,例如Freemarker。

您可以使用Freemarker作为Spring MVC的视图,请参阅http://viralpatel.net/blogs/spring-mvc-freemarker-ftl-example/

答案 1 :(得分:0)

使用Task从数据库和 Passing Parameters JavaFX FXML 中描述的任何方法获取数据,以便将数据传输到控制器,例如

@Override
public void start(Stage primaryStage) {
    Task<Pane> dataLoader = new Task<Pane>() {

        @Override
        protected Pane call() throws Exception {
            // create data
            XYChart.Series<String, Double> rain = new XYChart.Series<>();
            rain.setName("rain");

            Month[] months = Month.values();

            for (Month month : months) {
                // simulates slow database connection; just adding some random values here
                Thread.sleep(200);
                rain.getData().add(new XYChart.Data<>(month.toString(), Math.random() * 100));
            }
            // load chart (replace BarChartLoad.class.getResource("chart.fxml") with your own URL)
            FXMLLoader loader = new FXMLLoader(BarChartLoad.class.getResource("chart.fxml"));
            Pane pane = loader.load();
            // pass data to controller
            loader.<ControllerZW>getController().setData(FXCollections.observableArrayList(rain));
            return pane;
        }

    };

    // placeholder
    Pane root = new Pane();
    Scene scene = new Scene(root, 1000, 600);

    // set new scene root on successfull completion of the task
    dataLoader.setOnSucceeded(evt -> scene.setRoot(dataLoader.getValue()));

    // TODO: handle task failure

    new Thread(dataLoader).start();

    primaryStage.setScene(scene);
    primaryStage.show();
}
public class ControllerZW implements Interface.Ibacktomenu {

    @FXML
    private BarChart<String, Double> graph;

    public void setData(ObservableList<XYChart.Series<String, Double>> data) {
        graph.setData(data);
    }
    ...