【问题标题】:Button won't work javafx按钮不起作用 javafx
【发布时间】:2018-02-05 11:07:00
【问题描述】:

我是编程的初学者。我一直在尝试创建一个简单的程序,该程序从用户那里获取两个值(从 0 到 10 的两个等级)并返回它们之间的平均值。我已经用 Swing 和JOptionPane 完成了它,但使用 javafx 我什么也没得到。代码如下。

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


public class FXCalcMedia extends Application {

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

        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.show();
        stage.setTitle("CALCULADORA DE MÉDIA");

    }

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

}
package fxcalcmedia;

import java.net.URL; 
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.text.Text;



public class FXMLDocumentController implements Initializable {

    @FXML
    private Label lblMedia;
    private Button btnCalc;
    private Text txtMedia;
    private Text txtNota1;
    private Text txtNota2;


    @FXML
    private void clicouBotao(ActionEvent event) {

       double nota1 = Double.parseDouble(txtNota1.getText());

       double nota2 = Double.parseDouble(txtNota2.getText());

       double media = (nota1+nota2)/2;

       txtMedia.setText(Double.toString(media));


      }

    @Override
    public void initialize(URL url, ResourceBundle rb) {

    }


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

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

<AnchorPane id="AnchorPane" prefHeight="155.0" prefWidth="303.0" 
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" 
fx:controller="fxcalcmedia.FXMLDocumentController">
   <children>
      <Label fx:id="lblMedia" layoutX="30.0" layoutY="119.0" 
      text="Média" />
      <Label layoutX="28.0" layoutY="33.0" text="Nota 1" />
      <Label layoutX="28.0" layoutY="76.0" text="Nota 2" />
      <Button fx:id="btnCalc" layoutX="212.0" layoutY="71.0" 
      mnemonicParsing="false" onAction="#clicouBotao" text="Calcular" 
      />
      <TextField fx:id="txtNota1" layoutX="90.0" layoutY="28.0" 
      prefHeight="25.0" prefWidth="78.0" />
      <TextField fx:id="txtNota2" layoutX="90.0" layoutY="71.0" 
      prefHeight="25.0" prefWidth="78.0" />
      <TextField fx:id="txtMedia" layoutX="90.0" layoutY="114.0" 
      onAction="#clicouBotao" prefHeight="25.0" prefWidth="78.0" />
   </children>
</AnchorPane>

所以...出现了窗口,我插入了成绩,但是当我单击按钮获取平均成绩时,什么也没有发生。我已经尝试了很多东西,我已经搜索了很多......我希望有人可以提供帮助。再次感谢。

【问题讨论】:

    标签: button javafx textfield


    【解决方案1】:

    您需要在 fxml 文件中具有 fx:id="" 的每个 Node 上放置 @FXML 注释。 FXMLLoader 有必要创建正确的实例并将它们注入控制器。

    另一个问题是 fxml 文件中的组件类型。在 fxml 你使用TextField

    <TextField fx:id="txtNota1" layoutX="90.0" layoutY="28.0" 
    prefHeight="25.0" prefWidth="78.0" />
    <TextField fx:id="txtNota2" layoutX="90.0" layoutY="71.0" 
    prefHeight="25.0" prefWidth="78.0" />
    <TextField fx:id="txtMedia" layoutX="90.0" layoutY="114.0" 
    onAction="#clicouBotao" prefHeight="25.0" prefWidth="78.0" />
    

    但在 cotntroller 中你使用 Text:

    private Text txtMedia;
    private Text txtNota1;
    private Text txtNota2;
    

    解决办法:

    @FXML
    private Label lblMedia;
    @FXML
    private Button btnCalc;
    @FXML
    private TextField txtMedia;
    @FXML
    private TextField txtNota1;
    @FXML
    private TextField txtNota2;
    

    【讨论】:

      【解决方案2】:

      作为@MBec 答案的扩展。为 javaFX 创建 GUI 的一个非常好的工具是 JavaFX Scene Builder。它为您提供拖放功能,并为每个 fxml 文件的 Controller 类提供模板。

      【讨论】:

        猜你喜欢
        • 2019-01-17
        • 1970-01-01
        • 2018-08-27
        • 2020-03-14
        • 1970-01-01
        • 2011-12-02
        相关资源
        最近更新 更多