第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何解決使用 JavaFX 在場景生成器中繪制圖表的問題

如何解決使用 JavaFX 在場景生成器中繪制圖表的問題

qq_花開花謝_0 2023-07-28 10:38:54
我的程序有問題。我想在提供數(shù)據(jù)(方程的系數(shù))后繪制圖表。我嘗試更改我的導入(它對某些變量有幫助)我更改了 java.awt* 為 javafx.scene ...(很少導入)。FXML 文件:<?xml version="1.0" encoding="UTF-8"?><?import javafx.scene.chart.CategoryAxis?><?import javafx.scene.chart.LineChart?><?import javafx.scene.chart.NumberAxis?><?import javafx.scene.control.Button?><?import javafx.scene.control.Label?><?import javafx.scene.control.TextField?><?import javafx.scene.layout.AnchorPane?><?import javafx.scene.text.Font?><AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="700.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.172-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="grahps.Controller"><children>        <TextField fx:id="factorA" layoutX="24.0" layoutY="598.0" prefHeight="33.0" prefWidth="106.0" text="a=" AnchorPane.bottomAnchor="75.0" AnchorPane.leftAnchor="24.0" AnchorPane.rightAnchor="670.0" />        <TextField fx:id="factorB" layoutX="24.0" layoutY="630.0" prefHeight="33.0" prefWidth="106.0" text="b=" AnchorPane.bottomAnchor="37.0" AnchorPane.leftAnchor="24.0" AnchorPane.rightAnchor="670.0" />        <TextField fx:id="factorC" layoutX="24.0" layoutY="674.0" prefHeight="33.0" prefWidth="106.0" text="c=" AnchorPane.bottomAnchor="1.0" AnchorPane.leftAnchor="24.0" AnchorPane.rightAnchor="670.0" />        <TextField layoutX="158.0" layoutY="592.0" prefHeight="47.0" prefWidth="120.0" text="xMin=" AnchorPane.bottomAnchor="61.0" AnchorPane.leftAnchor="158.0" AnchorPane.rightAnchor="522.0" fx:id="xMin" />        <TextField layoutX="158.0" layoutY="650.0" prefHeight="47.0" prefWidth="120.0" text="xMax=" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="158.0" AnchorPane.rightAnchor="522.0" fx:id="xMax" />        <Label fx:id="label" layoutX="468.0" layoutY="629.0" prefHeight="61.0" prefWidth="276.0" text="f(x)=" AnchorPane.bottomAnchor="30.0" AnchorPane.leftAnchor="468.0" AnchorPane.rightAnchor="56.0">LineChart (fx:id="drawChart") 生成的部分進行通信:“未解析的 fx:id 參考
查看完整描述

1 回答

?
開滿天機

TA貢獻1786條經(jīng)驗 獲得超13個贊

代碼中有幾個錯誤,例如:

  • //Parser Text Field -> double控制器中的 -block 執(zhí)行得太早 = > NullPointerException

  • 當調(diào)用controller.drawChart(stage)-start方法controllerequals null=>時NullPointerException。

  • drawChart控制器的 - 方法中seriesequals null,因為chartequals null=> NullPointerException。

  • 控制器中缺少對圖表的引用。這已經(jīng)在評論中指出了。

  • CategoryAxis用作 x 軸的類型,盡管 x 數(shù)據(jù)是數(shù)值。

在修復這些錯誤之前,應該改進架構(這會自動修復一些錯誤):

  • Controller-class:由于圖表必須初始化,然后在每次單擊按鈕時更新,因此控制器中的以下更改將很有用:

    因此,該Controller-class 如下所示:

    1. 實現(xiàn)一個initialize方法,可以在其中進行必要的初始化。

    2. 實現(xiàn)一個updateChart- 方法,該方法在單擊按鈕時調(diào)用并更新圖表。

    3. 定義對折線圖的引用。

    4. 定義對兩個軸的參考。

public class Controller {

    @FXML

    TextField factorA;

    @FXML

    TextField factorB;

    @FXML

    TextField factorC;

    @FXML

    TextField xMin;

    @FXML

    TextField xMax;

    @FXML

    Label label;

    @FXML

    Button button;

    @FXML

    LineChart<Number, Number> chart; 

    @FXML

    NumberAxis xAxis;

    @FXML

    NumberAxis yAxis;

    @FXML

    public void updateChart() {/*ToDo*/}

    public void initialize(){/*ToDo*/}

Main-class:在start-method 中,僅需要加載 FXML:


@Override

public void start(Stage stage) throws Exception {

    Parent root = FXMLLoader.load(getClass().getResource("/fxml/sample.fxml"));

    Scene scene = new Scene(root, 800, 800);

    stage.setScene(scene);

    stage.show();

}

FXML:應進行以下更改:

  1. 將折線圖的 ID 更改為fx:id="chart"

  2. 將 LineChart 的 x 軸類型更改為NumberAxis

  3. 添加onAction="#updateChart"到按鈕。updateChart單擊按鈕時將調(diào)用- 方法。

  4. fx:id="xAxis"為兩個軸(和)定義 ID fx:id="yAxis"。

  5. 刪除所有文本字段的所有非數(shù)字字符(例如text="a=")的初始化,否則解析會出現(xiàn)問題(使用標簽或水印更有意義,例如promptText="a")。

然后,F(xiàn)XML 變?yōu)椋?/p>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="700.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.172-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="grahps.Controller">

    <children>

        <TextField fx:id="factorA" prefHeight="33.0" prefWidth="106.0" AnchorPane.bottomAnchor="75.0" AnchorPane.leftAnchor="24.0" AnchorPane.rightAnchor="670.0" promptText="a" />

        <TextField fx:id="factorB" prefHeight="33.0" prefWidth="106.0" AnchorPane.bottomAnchor="37.0" AnchorPane.leftAnchor="24.0" AnchorPane.rightAnchor="670.0" promptText="b" />

        <TextField fx:id="factorC" prefHeight="33.0" prefWidth="106.0" AnchorPane.bottomAnchor="1.0" AnchorPane.leftAnchor="24.0" AnchorPane.rightAnchor="670.0" promptText="c" />

        <TextField fx:id="xMin" prefHeight="47.0" prefWidth="120.0" AnchorPane.bottomAnchor="61.0" AnchorPane.leftAnchor="158.0" AnchorPane.rightAnchor="522.0" promptText="xMin" />

        <TextField fx:id="xMax" prefHeight="47.0" prefWidth="120.0" AnchorPane.bottomAnchor="3.0" AnchorPane.leftAnchor="158.0" AnchorPane.rightAnchor="522.0" promptText="xMax" />

        <Label fx:id="label" prefHeight="61.0" prefWidth="276.0" AnchorPane.bottomAnchor="30.0" AnchorPane.leftAnchor="468.0" AnchorPane.rightAnchor="56.0" text="f(x)=" >

            <font>

                <Font size="18.0" />

            </font>

        </Label>

        <LineChart fx:id="chart" prefHeight="598.0" prefWidth="800.0" title="Chart">

            <xAxis>

                <NumberAxis fx:id="xAxis" side="BOTTOM" />

            </xAxis>

            <yAxis>

                <NumberAxis fx:id="yAxis" side="LEFT" />

            </yAxis>

        </LineChart>

        <Button fx:id="button" prefHeight="61.0" prefWidth="98.0" layoutX="317.0" layoutY="612.0" mnemonicParsing="false" text="Rysuj wykres" onAction="#updateChart" />

    </children>

</AnchorPane>

通過這些更改,應用程序啟動時會顯示一個空圖表(因為尚未實現(xiàn)初始化)。單擊該按鈕沒有任何效果(因為尚未實施更新)。


初始化:


public void initialize(){       

    initChartProperties();

    initInputControls();        

    XYChart.Series<Number, Number> series = getSeries();        

    chart.getData().add(series);

}

-methodgetSeries本質(zhì)上包含 -method 的邏輯drawChart:


private XYChart.Series<Number, Number> getSeries() {


    double xMax1 = Double.parseDouble(xMax.getText());

    double xMin1 = Double.parseDouble(xMin.getText());

    double a = Double.parseDouble(factorA.getText());

    double b = Double.parseDouble(factorB.getText());

    double c = Double.parseDouble(factorC.getText());


    XYChart.Series<Number,Number> series = new XYChart.Series<Number, Number>();

    series.setName("Chart");


    String pattern;

    if (a == 0 && c == 0) {

        pattern = "f(x)=" + factorB.getText();

        label.setText(pattern);

    } else if (c == 0) {

        pattern = "f(x)=" + factorA.getText() + "x+" + factorB.getText();

        label.setText(pattern);

        for (double i = xMin1; i <= xMax1; i++) {

            double y = a * i + b;

            series.getData().add(new Data<Number, Number>(i, y));

        }

    } else {

        pattern = "f(x)=" + factorA.getText() + "x^2+" + factorB.getText() + "x+" + factorC.getText();

        label.setText(pattern);

        for (double i = xMin1; i < xMax1; i++) {

            double y = a * i * i + b * i + c;

            series.getData().add(new Data<Number, Number>(i, y));

        }

    }


    return series;

}

-方法initInputControls初始化輸入控件,例如:


private void initInputControls() {

    xMax.setText("100.0");

    xMin.setText("10.0");

    factorA.setText("1.0");

    factorB.setText("2.0");

    factorC.setText("3.0");

}

-方法initChartProperties初始化圖表:


private void initChartProperties() {

    chart.setAnimated(true);

    xAxis.setLabel("X Label");

    yAxis.setLabel("Y Label");      

}

如果您想在啟動時顯示空圖表,只需刪除 - 方法中的最后三行即可initialize。


更新:更新只是刪除舊系列并將新系列添加到圖表中:


@FXML

public void updateChart() {     

    XYChart.Series<Number, Number> series = getSeries();

    chart.getData().clear();

    chart.getData().add(series);

}

進行這些更改后,應用程序將按預期運行。左圖顯示啟動后的應用程序,右圖顯示更新輸入值后的應用程序。

http://img1.sycdn.imooc.com//64c32a830001a2ab12550647.jpg

有些事情仍然可以改進,例如,如果窗口大小更改,應用程序將無法正確縮放。此外,缺少輸入字段的驗證??梢栽?- 方法中禁用圖表動畫initChartProperties。

更新: 如果不顯示任何符號,請?zhí)砑?-initChartProperties方法:

chart.setCreateSymbols(false);

結果是:

http://img1.sycdn.imooc.com//64c32a9600018cba12630645.jpg

查看完整回答
反對 回復 2023-07-28
  • 1 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號