2015-09-05 52 views
0

我有一个程序,它将数据输入到一个表中,计算其他数据,然后再绘制它。表格和数据正确显示,但线图没有显示任何内容。我使用JavaFXML应用程序和scenebuilder。 PS:我是JAVA新手。图不显示

控制器:

package minpro1; 

//import java.net.URL; 
import java.text.DecimalFormat; 
//import java.util.ResourceBundle; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
//import javafx.fxml.Initializable; 
import javafx.scene.chart.LineChart; 
import javafx.scene.chart.NumberAxis; 
import javafx.scene.chart.XYChart; 
import javafx.scene.control.Button; 
import javafx.scene.control.TextField; 

public class minpro1Controller { 

double s1, s2, s3, s4, s5, s6, s7, s8, s9, w1, w2, w3, w4, w5, w6, w7, w8, pan, wp1, wp2, wp3, wp4, wp5, wp6, wp7, wp8,wp9, p80, totalweight, wptotal; 
double os1, os2, os3, os4, os5, os6, os7, os8, os9, us1, us2, us3, us4, us5, us6, us7, us8, us9; 

XYChart.Series graph = new XYChart.Series(); 

@FXML 
private TextField P80; 

@FXML 
private TextField S3; 

@FXML 
private TextField W7; 

@FXML 
private TextField S4; 

@FXML 
private TextField W8; 

@FXML 
private TextField S5; 

@FXML 
private TextField S6; 

@FXML 
private TextField S7; 

@FXML 
private TextField S8; 

@FXML 
private TextField OS1; 

@FXML 
private NumberAxis yaxis; 

@FXML 
private TextField OS3; 

@FXML 
private TextField OS2; 

@FXML 
private TextField TOTALWEIGHT; 

@FXML 
private TextField OS5; 

@FXML 
private TextField OS4; 

@FXML 
private NumberAxis xaxis; 

@FXML 
private TextField OS7; 

@FXML 
private TextField US1; 

@FXML 
private TextField OS6; 

@FXML 
private TextField US3; 

@FXML 
private TextField OS8; 

@FXML 
private TextField OS9; 

@FXML 
private TextField US2; 

@FXML 
private TextField US5; 

@FXML 
private TextField US4; 

@FXML 
private TextField US7; 

@FXML 
private TextField US6; 

@FXML 
private TextField US8; 

@FXML 
private TextField US9; 

@FXML 
private TextField TOTALWP; 

@FXML 
private TextField WP2; 

@FXML 
private TextField WP1; 

@FXML 
private TextField W1; 

@FXML 
private TextField WP4; 

@FXML 
private TextField W2; 

@FXML 
private TextField WP3; 

@FXML 
private TextField W3; 

@FXML 
private TextField WP6; 

@FXML 
private TextField PAN; 

@FXML 
private TextField W4; 

@FXML 
private TextField WP5; 

@FXML 
private TextField S1; 

@FXML 
private TextField W5; 

@FXML 
private TextField WP8; 

@FXML 
private TextField WP9; 

@FXML 
private TextField S2; 

@FXML 
private TextField W6; 

@FXML 
private TextField WP7; 

@FXML 
private LineChart<Number,Number> GRAPH; 


@FXML 
private Button BUTTON; 

@FXML 
void handleButtonAction(ActionEvent event) 

{ 
    s1 = Double.parseDouble(S1.getText()); 
    s2 = Double.parseDouble(S2.getText()); 
    s3 = Double.parseDouble(S3.getText()); 
    s4 = Double.parseDouble(S4.getText()); 
    s5 = Double.parseDouble(S5.getText()); 
    s6 = Double.parseDouble(S6.getText()); 
    s7 = Double.parseDouble(S7.getText()); 
    s8 = Double.parseDouble(S8.getText()); 
    s9 = -37; 

    w1 = Double.parseDouble(W1.getText()); 
    w2 = Double.parseDouble(W2.getText()); 
    w3 = Double.parseDouble(W3.getText()); 
    w4 = Double.parseDouble(W4.getText()); 
    w5 = Double.parseDouble(W5.getText()); 
    w6 = Double.parseDouble(W6.getText()); 
    w7 = Double.parseDouble(W7.getText()); 
    w8 = Double.parseDouble(W8.getText()); 

    pan = Double.parseDouble(PAN.getText()); 

    double s[]={s9, s8, s7, s6, s5, s4, s3, s2, s1}; 
    double w[]={pan, w1, w2, w3, w4, w5, w6, w7, w8}; 


    totalweight=totalweightcalculations(w, pan); 

    wp1=(w1/totalweight)*100; 
    wp2=(w2/totalweight)*100; 
    wp3=(w3/totalweight)*100; 
    wp4=(w4/totalweight)*100; 
    wp5=(w5/totalweight)*100; 
    wp6=(w6/totalweight)*100; 
    wp7=(w7/totalweight)*100; 
    wp8=(w8/totalweight)*100; 
    wp9=(pan/totalweight)*100; 

    wptotal=wp1+wp2+wp3+wp4+wp5+wp6+wp7+wp8+wp9; 

    os1=wp1; 
    os2=wp2+os1; 
    os3=wp3+os2; 
    os4=wp4+os3; 
    os5=wp5+os4; 
    os6=wp6+os5; 
    os7=wp7+os6; 
    os8=wp8+os7; 
    os9=wp9+os8; 

    us1=100-os1; 
    us2=100-os2; 
    us3=100-os3; 
    us4=100-os4; 
    us5=100-os5; 
    us6=100-os6; 
    us7=100-os7; 
    us8=100-os8; 
    us9=100-os9; 

    double us[]={us9, us8, us7, us6, us5, us4, us3, us2, us1}; 

    double a, b, c, d; 
    for(int i=0; i<9; i++) 
    { 
     if (us[i]<80 && us[i+1]>80) 
       { 
        a=Math.log10(us[i])-Math.log10(80); 
        b=Math.log10(us[i+1])-Math.log10(us[i]); 
        c=Math.log10(s[i+1])-Math.log10(s[i]); 
        d=Math.log10(s[i])-(c*(a/b)); 
        p80=Math.pow(10, d); 

        break; 
       } 

    } 



    DecimalFormat df = new DecimalFormat("#.##"); 
    String TW = df.format(totalweight); 
    TOTALWEIGHT.setText(TW); 
    String wpa = df.format(wp1); 
    WP1.setText(wpa); 
    String wpb = df.format(wp2); 
    WP2.setText(wpb); 
    String wpc = df.format(wp3); 
    WP3.setText(wpc); 
    String wpd = df.format(wp4); 
    WP4.setText(wpd); 
    String wpe = df.format(wp5); 
    WP5.setText(wpe); 
    String wpf = df.format(wp6); 
    WP6.setText(wpf); 
    String wpg = df.format(wp7); 
    WP7.setText(wpg); 
    String wph = df.format(wp8); 
    WP8.setText(wph); 
    String wpi = df.format(wp9); 
    WP9.setText(wpi); 
    String twp = df.format(wptotal); 
    TOTALWP.setText(twp); 

    String osa = df.format(os1); 
    OS1.setText(osa);  
    String osb = df.format(os2); 
    OS2.setText(osb); 
    String osc = df.format(os3); 
    OS3.setText(osc);  
    String osd = df.format(os4); 
    OS4.setText(osd); 
    String ose = df.format(os5); 
    OS5.setText(ose); 
    String osf = df.format(os6); 
    OS6.setText(osf);  
    String osg = df.format(os7); 
    OS7.setText(osg);  
    String osh = df.format(os8); 
    OS8.setText(osh);  
    String osi = df.format(os9); 
    OS9.setText(osi); 

    String usa = df.format(us1); 
    US1.setText(usa); 
    String usb = df.format(us2); 
    US2.setText(usb); 
    String usc = df.format(us3); 
    US3.setText(usc); 
    String usd = df.format(us4); 
    US4.setText(usd); 
    String use = df.format(us5); 
    US5.setText(use); 
    String usf = df.format(us6); 
    US6.setText(usf); 
    String usg = df.format(us7); 
    US7.setText(usg); 
    String ush = df.format(us8); 
    US8.setText(ush); 
    String usi = df.format(us9); 
    US9.setText(usi); 

    String pp = df.format(p80); 
    P80.setText(pp); 


    for(int i=0; i<9; i++) 
    { 
     graph.getData().add(new XYChart.Data(Math.log10(s[i]), Math.log10(us[i]))); 

    } 
    GRAPH.getData().add(graph); 

} 

private double totalweightcalculations(double[] s, double pan) 
{ 
    double a=0, tw=0; 
    for(int i=0; i<9;i++) 
    { 
     tw=s[i]+a; 
     a=tw; 
    } 

    return tw; 
} 



} 

FXML:

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.text.*?> 
<?import javafx.scene.chart.*?> 
<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 


<AnchorPane id="AnchorPane" prefHeight="386.0" prefWidth="1162.0"   xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="minpro1.minpro1Controller"> 
<children> 
    <Label alignment="CENTER" layoutX="25.0" layoutY="21.0" text="Size (microns)" textAlignment="CENTER" /> 
    <Label alignment="CENTER" layoutX="144.0" layoutY="21.0" text="Weight" /> 
    <Label alignment="CENTER" contentDisplay="CENTER" layoutX="481.0" layoutY="21.0" text="Percent Undersize" /> 
    <Label alignment="CENTER" layoutX="357.0" layoutY="21.0" text="Percent Oversize" /> 
    <Label alignment="CENTER" contentDisplay="CENTER" layoutX="234.0" layoutY="21.0" text="Weight Percent" /> 
    <TextField fx:id="S1" alignment="CENTER" layoutX="25.0" layoutY="38.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="S2" alignment="CENTER" layoutX="25.0" layoutY="63.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="S3" alignment="CENTER" layoutX="25.0" layoutY="88.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="S4" alignment="CENTER" layoutX="25.0" layoutY="113.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="S5" alignment="CENTER" layoutX="25.0" layoutY="138.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="S6" alignment="CENTER" layoutX="25.0" layoutY="163.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="S7" alignment="CENTER" layoutX="25.0" layoutY="189.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="S8" alignment="CENTER" layoutX="25.0" layoutY="214.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="W8" alignment="CENTER" layoutX="127.0" layoutY="214.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="W7" alignment="CENTER" layoutX="127.0" layoutY="189.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="W6" alignment="CENTER" layoutX="127.0" layoutY="163.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="W5" alignment="CENTER" layoutX="127.0" layoutY="138.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="W4" alignment="CENTER" layoutX="127.0" layoutY="113.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="W3" alignment="CENTER" layoutX="127.0" layoutY="88.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="W2" alignment="CENTER" layoutX="127.0" layoutY="63.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="W1" alignment="CENTER" layoutX="127.0" layoutY="38.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="WP1" alignment="CENTER" editable="false" layoutX="224.0" layoutY="38.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="WP2" alignment="CENTER" editable="false" layoutX="224.0" layoutY="63.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="WP3" alignment="CENTER" editable="false" layoutX="224.0" layoutY="88.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="WP4" alignment="CENTER" editable="false" layoutX="224.0" layoutY="113.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="WP5" alignment="CENTER" editable="false" layoutX="224.0" layoutY="138.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="WP6" alignment="CENTER" editable="false" layoutX="224.0" layoutY="163.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="WP7" alignment="CENTER" editable="false" layoutX="224.0" layoutY="189.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="WP8" alignment="CENTER" editable="false" layoutX="224.0" layoutY="214.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="OS8" alignment="CENTER" editable="false" layoutX="350.0" layoutY="214.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="OS7" alignment="CENTER" editable="false" layoutX="350.0" layoutY="189.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="OS6" alignment="CENTER" editable="false" layoutX="350.0" layoutY="163.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="OS5" alignment="CENTER" editable="false" layoutX="350.0" layoutY="138.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="OS4" alignment="CENTER" editable="false" layoutX="350.0" layoutY="113.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="OS3" alignment="CENTER" editable="false" layoutX="350.0" layoutY="88.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="OS2" alignment="CENTER" editable="false" layoutX="350.0" layoutY="63.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="OS1" alignment="CENTER" editable="false" layoutX="350.0" layoutY="38.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="US1" alignment="CENTER" editable="false" layoutX="478.0" layoutY="38.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="US2" alignment="CENTER" editable="false" layoutX="478.0" layoutY="63.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="US3" alignment="CENTER" editable="false" layoutX="478.0" layoutY="88.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="US4" alignment="CENTER" editable="false" layoutX="478.0" layoutY="113.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="US5" alignment="CENTER" editable="false" layoutX="478.0" layoutY="138.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="US6" alignment="CENTER" editable="false" layoutX="478.0" layoutY="163.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="US7" alignment="CENTER" editable="false" layoutX="478.0" layoutY="189.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="US8" alignment="CENTER" editable="false" layoutX="478.0" layoutY="214.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="PAN" alignment="CENTER" layoutX="127.0" layoutY="239.0" prefHeight="25.0" prefWidth="74.0" /> 
    <TextField fx:id="TOTALWEIGHT" alignment="CENTER" editable="false" layoutX="127.0" layoutY="264.0" prefHeight="25.0" prefWidth="74.0" /> 
    <Label alignment="CENTER" layoutX="48.0" layoutY="243.0" text="PAN" /> 
    <Label alignment="CENTER" layoutX="42.0" layoutY="268.0" text="TOTAL" /> 
    <TextField fx:id="TOTALWP" alignment="CENTER" editable="false" layoutX="224.0" layoutY="264.0" prefHeight="25.0" prefWidth="102.0" /> 
    <LineChart fx:id="GRAPH" layoutX="678.0" layoutY="28.0" prefHeight="331.0" prefWidth="416.0" title="GATES-GAUDIN-SCHUHMANN PLOT"> 
    <xAxis> 
     <NumberAxis label="log Particle Size" side="BOTTOM" fx:id="xaxis" /> 
    </xAxis> 
    <yAxis> 
     <NumberAxis fx:id="yaxis" label="log Cumulative Perent Passing" side="LEFT" /> 
    </yAxis> 
    </LineChart> 
    <Button fx:id="BUTTON" alignment="CENTER" layoutX="581.0" layoutY="273.0" mnemonicParsing="false" onAction="#handleButtonAction" text="Show Answers" /> 
    <Label layoutX="452.0" layoutY="338.0" text="P80"> 
    <font> 
     <Font name="System Bold" size="14.0" /> 
    </font> 
    </Label> 
    <TextField fx:id="P80" alignment="CENTER" editable="false" layoutX="487.0" layoutY="335.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="OS9" alignment="CENTER" editable="false" layoutX="350.0" layoutY="239.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="US9" alignment="CENTER" editable="false" layoutX="478.0" layoutY="239.0" prefHeight="25.0" prefWidth="102.0" /> 
    <TextField fx:id="WP9" alignment="CENTER" editable="false" layoutX="224.0" layoutY="239.0" prefHeight="25.0" prefWidth="102.0" /> 
</children> 
</AnchorPane> 

MAINAPP:

package minpro1; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 


public class MinPro1 extends Application { 

@Override 
public void start(Stage stage) throws Exception { 
    Parent root = FXMLLoader.load(getClass().getResource("minpro1.fxml")); 

    Scene scene = new Scene(root); 

    stage.setScene(scene); 
    stage.show(); 
} 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    launch(args); 
} 

} 
+0

应该像你看起来对我来说''handleButtonAction(...)'方法中有'ArrayIndexOutOfBoundsException'。有没有错误信息? –

+0

@James_D没有错误信息 –

+0

我运行了它,但是我不知道要输入什么数字。图表显示了一些东西,但是因为这些值没有意义,所以没有多少值得注意的地方。对于'LineChart',你真的希望数据按照'x'值的顺序。如果您只是在该方法中绘制一些固定数据,您是否看到图表中的任何内容? –

回答

0

您的一个数据点,是给NaN x值,这是造成自动范围数轴的失败。你可以看到这一点,如果你在你的按钮操作方法提供一些记录:

for(int i=0; i<9; i++) 
{ 

    XYChart.Data<Number, Number> dataPoint = new XYChart.Data<>(Math.log10(s[i]), Math.log10(us[i])); 
    System.out.println("("+dataPoint.getXValue()+", "+dataPoint.getYValue()+")"); 
    graph.getData().add(dataPoint); 
} 

您可以通过添加到图表之前检查值修复该问题:

for(int i=0; i<9; i++) 
{ 

    XYChart.Data<Number, Number> dataPoint = new XYChart.Data<>(Math.log10(s[i]), Math.log10(us[i])); 
    System.out.println("("+dataPoint.getXValue()+", "+dataPoint.getYValue()+")"); 
    if (Double.isFinite(dataPoint.getXValue().doubleValue())) { 
     graph.getData().add(dataPoint); 
    } 
} 
+0

它的工作!谢谢! –