2014-12-03 55 views
0

我是一个新的爱好者编码器。我无法弄清楚这一点,迄今为止搜索一直无效。我使用了FXML文件中的两个切换按钮,点击时我想定义一个布尔变量。然后,我想使用该变量来稍后驱动我为了执行某些代码而往下走的路径。我无法弄清楚如何定义变量。欢迎任何指导。我会后的下面的代码有两个来源:使用FXML和JavaFX,如何使用切换按钮设置布尔变量?

的FXML文件代码(按场景生成器创建的):

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

<?import java.lang.*?> 
<?import java.net.*?> 
<?import javafx.geometry.*?> 
<?import javafx.scene.text.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 

<GridPane alignment="CENTER" hgap="10" styleClass="root" vgap="10" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="bmi.calculator.BMICalculatorController"> 

<padding><Insets bottom="10" left="25" right="25" top="25" /></padding> 
    <children> 


    <Text id="header-text" text="BMI Calculator" GridPane.columnIndex="0" GridPane.columnSpan="3" GridPane.rowIndex="0" /> 

    <Label text="Please enter your age:" GridPane.columnIndex="0" GridPane.rowIndex="1" /> 

    <TextField fx:id="ageBox" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="1" /> 

    <Label text="Enter your height in inches:" GridPane.columnIndex="0" GridPane.rowIndex="2" /> 

    <TextField fx:id="heightBox" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="2" /> 

    <Label text="Enter your weight in pounds:" GridPane.columnIndex="0" GridPane.rowIndex="3" /> 

    <TextField fx:id="weightBox" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="3" /> 

    <Label text="Do you use tobbaco?" GridPane.columnIndex="0" GridPane.rowIndex="4" /> 

    <ToggleButton onAction="#handleToggleYesAction" mnemonicParsing="false" prefHeight="31.0" prefWidth="85.0" text="Yes" GridPane.columnIndex="1" GridPane.rowIndex="4" /> 
    <ToggleButton onAction="#handleToggleNoAction" mnemonicParsing="false" prefHeight="31.0" prefWidth="85.0" text="No" GridPane.columnIndex="2" GridPane.rowIndex="4" /> 

    <HBox alignment="BOTTOM_RIGHT" spacing="10" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="6"> 
     <children> 
      <Button onAction="#handleCalculateButtonAction" text="Calculate" /> 
     </children> 
    </HBox> 

    <Text fx:id="outputText1" wrappingWidth="211.0" GridPane.columnIndex="1" GridPane.rowIndex="8" /> 

    </children> 

    <stylesheets> 
     <URL value="@Login.css" /> 
    </stylesheets> 
    <columnConstraints> 
     <ColumnConstraints maxWidth="200.0" minWidth="180.0" prefWidth="200.0" /> 
     <ColumnConstraints maxWidth="100.0" minWidth="35.0" prefWidth="85.0" /> 
     <ColumnConstraints maxWidth="100.0" minWidth="25.0" prefWidth="85.0" /> 
    </columnConstraints> 
    <rowConstraints> 
    <RowConstraints /> 
     <RowConstraints /> 
     <RowConstraints /> 
     <RowConstraints /> 
     <RowConstraints /> 
     <RowConstraints /> 
     <RowConstraints /> 
     <RowConstraints /> 
     <RowConstraints /> 
    </rowConstraints> 

</GridPane> 

和控制器:上的线36发生

package bmi.calculator; 

import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.scene.control.TextField; 
import javafx.scene.control.ToggleGroup; 
import javafx.scene.text.Text; 

public class BMICalculatorController { 
    @FXML private Text outputText1; 
    @FXML private TextField ageBox; 
    @FXML private TextField heightBox; 
    @FXML private TextField weightBox; 

    @FXML protected void handleToggleYesAction(ActionEvent t) { 
     boolean tobaccoToggle = true; 
    } 

    @FXML protected void handleToggleNoAction(ActionEvent t) { 
     boolean tobaccoToggle = false; 
    } 

    @FXML protected void handleCalculateButtonAction(ActionEvent event) { 

     //obtains the variables we need to work with 
     boolean tobacco = tobaccoToggle; //error is here 
     double weight = Double.parseDouble(weightBox.getText()); 
     double height = Double.parseDouble(heightBox.getText()); 
     int age = Integer.parseInt(ageBox.getText()); 

     //Disregard everything else below here for now - I'll be changing it up some later. 
     //performs BMI calculation 
     double bmi; 
     double stepOne; 
     stepOne = weight/height; 
     double stepTwo; 
     stepTwo = stepOne/height; 
     bmi = stepTwo*703; 

     //round BMI to two decimal places 
     double roundedbmi = bmi; 
     roundedbmi = roundedbmi * 100; 
     roundedbmi = Math.round(roundedbmi); 
     roundedbmi = roundedbmi/100; 

     //transform height to feet and inches 
     int height2 = (int)Math.round(height); 
     int heightFeet = height2/12; 
     int heightInches = height2%12; 

     //transform weight to int 
     int weight2 = (int)Math.round(weight); 

     outputText1.setText("Your BMI is " + roundedbmi); 

     //tell the user what they enetered 
     System.out.println("Your height is " + heightFeet + " feet and " + heightInches + " inches."); 
     System.out.println("Your weight is " + weight2 + " pounds."); 
     System.out.println("Your BMI is " + roundedbmi); 
     System.out.println("Your tobacco use is " + tobacco); 
    } 
} 

错误控制器:找不到符号:tobaccoToggle

回答

0

您必须在类BMICalculatorController中定义'tobaccoToggle'字段。由于范围问题,您会遇到错误。在你的代码中,函数调用时创建的'handleToggleYesAction'中的tobaccoToggle变量在函数完成时死亡。并在'handleToggleNoAction'相同的问题。

这是代码。

package bmi.calculator; 

import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.scene.control.TextField; 
import javafx.scene.control.ToggleGroup; 
import javafx.scene.text.Text; 

public class BMICalculatorController { 
    @FXML private Text outputText1; 
    @FXML private TextField ageBox; 
    @FXML private TextField heightBox; 
    @FXML private TextField weightBox; 
    private boolean tobaccoToggle; 

    @FXML protected void handleToggleYesAction(ActionEvent t) { 
     tobaccoToggle = true; 
    } 

    @FXML protected void handleToggleNoAction(ActionEvent t) { 
     tobaccoToggle = false; 
    } 

    @FXML protected void handleCalculateButtonAction(ActionEvent event) { 

     //obtains the variables we need to work with 
     boolean tobacco = tobaccoToggle; //error is here 
     double weight = Double.parseDouble(weightBox.getText()); 
     double height = Double.parseDouble(heightBox.getText()); 
     int age = Integer.parseInt(ageBox.getText()); 

     //Disregard everything else below here for now - I'll be changing it up some later. 
     //performs BMI calculation 
     double bmi; 
     double stepOne; 
     stepOne = weight/height; 
     double stepTwo; 
     stepTwo = stepOne/height; 
     bmi = stepTwo*703; 

     //round BMI to two decimal places 
     double roundedbmi = bmi; 
     roundedbmi = roundedbmi * 100; 
     roundedbmi = Math.round(roundedbmi); 
     roundedbmi = roundedbmi/100; 

     //transform height to feet and inches 
     int height2 = (int)Math.round(height); 
     int heightFeet = height2/12; 
     int heightInches = height2%12; 

     //transform weight to int 
     int weight2 = (int)Math.round(weight); 

     outputText1.setText("Your BMI is " + roundedbmi); 

     //tell the user what they enetered 
     System.out.println("Your height is " + heightFeet + " feet and " + heightInches + " inches."); 
     System.out.println("Your weight is " + weight2 + " pounds."); 
     System.out.println("Your BMI is " + roundedbmi); 
     System.out.println("Your tobacco use is " + tobacco); 
    } 
} 
+0

工作就像一个魅力。谢谢! – stwinward 2014-12-04 01:06:26