簡體   English   中英

如何在javafx上設置一個動作

[英]how to set an action on javafx

我應該做一個簡單的計算器。

 import javafx.application.Application;
 import javafx.geometry.Pos;
 import javafx.scene.Scene;
 import javafx.scene.layout.HBox;
 import javafx.stage.Stage;
 import javafx.scene.control.Button;
 import javafx.scene.control.Label;
   import javafx.scene.control.TextField;

   public class SimpleCalculaterFX extends Application {
   public static void main(String[] args) {
    launch(args);
   }

   @Override
   public void start(Stage stage) {
    // TODO Auto-generated method stub
   stage.setTitle("simple Calculater");
   HBox hbox = new HBox();
   HBox hbox2 = new HBox();
   Scene scene = new Scene(hbox);
   Scene scene2 = new Scene(hbox2);
   Label lb1 = new Label("Nuber1");
   Label lb2 = new Label("Nuber2");
   Label lb3 = new Label("Result");
   TextField tx1 = new TextField();
   TextField tx2 = new TextField();
   TextField tx3 = new TextField();
   Button b1= new Button("ADD");
   Button b2= new Button("SUBTRACT");
   Button b3= new Button("DIVIDE");
   Button b4= new Button("MULTIPLY");
   hbox.getChildren().addAll(lb1,tx1,lb2,tx2,lb3,tx3);
   hbox.setAlignment(Pos.TOP_RIGHT);
   hbox2.getChildren().addAll(b1,b2,b3,b4);
   hbox2.setAlignment(Pos.BOTTOM_CENTER);
   stage.setScene(scene);
   stage.setScene(scene2);
    stage.show();

   //  Integer num1 = Integer.parseInt(tx1.getText());
   //nteger num2 = Integer.parseInt(tx2.getText());
   b1.setOnAction(e->{

      Integer num1 = Integer.parseInt(tx1.getText());
      Integer num2 = Integer.parseInt(tx2.getText());
      Integer res;
      res= num1+num2;
      tx3.setText(String.format("%d", res));
   });
   b2.setOnAction(e->{

      Integer num1 = Integer.parseInt(tx1.getText());
      Integer num2 = Integer.parseInt(tx2.getText());
      Integer res;
      res= num1-num2;
      tx3.setText(String.format("%d", res));

   });
   b3.setOnAction(e->{

      Integer num1 = Integer.parseInt(tx1.getText());
      Integer num2 = Integer.parseInt(tx2.getText());
      Integer res;
      res=num1/num2;
      tx3.setText(String.format("%d", res));

   });
   b4.setOnAction(e->{

      Integer num1 = Integer.parseInt(tx1.getText());
      Integer num2 = Integer.parseInt(tx2.getText());
      Integer res;
      res= num1*num2;
      tx3.setText(String.format("%d", res));

  });

}

}

我寫了這個,但它沒有顯示任何內容。由於方法的錯誤,我教了它,但它沒有用。 有誰能告訴我哪里出錯了。

你應該只有 1 個場景 在您的示例中,您可以將 hboxes 放入vbox並將 vbox 放在場景中

這是您的代碼的修改版本:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class SimpleCalculaterFX extends Application {

    @Override
    public void start(Stage stage) {

        stage.setTitle("simple Calculater");

        Label lb1 = new Label("Nuber1");
        Label lb2 = new Label("Nuber2");
        Label lb3 = new Label("Result");
        TextField tx1 = new TextField();
        TextField tx2 = new TextField();
        TextField tx3 = new TextField();

        HBox hbox = new HBox();
        hbox.getChildren().addAll(lb1, tx1, lb2, tx2, lb3, tx3);
        hbox.setAlignment(Pos.TOP_RIGHT);

        Button b1 = new Button("ADD");
        Button b2 = new Button("SUBTRACT");
        Button b3 = new Button("DIVIDE");
        Button b4 = new Button("MULTIPLY");

        HBox hbox2 = new HBox();
        hbox2.getChildren().addAll(b1, b2, b3, b4);
        hbox2.setAlignment(Pos.BOTTOM_CENTER);

        VBox vBox = new VBox();
        vBox.getChildren().addAll( hbox, hbox2);

        Scene scene = new Scene(vBox);
        stage.setScene(scene);
        stage.show();

        // Integer num1 = Integer.parseInt(tx1.getText());
        // nteger num2 = Integer.parseInt(tx2.getText());
        b1.setOnAction(e -> {

            Integer num1 = Integer.parseInt(tx1.getText());
            Integer num2 = Integer.parseInt(tx2.getText());
            Integer res;
            res = num1 + num2;
            tx3.setText(String.format("%d", res));
        });
        b2.setOnAction(e -> {

            Integer num1 = Integer.parseInt(tx1.getText());
            Integer num2 = Integer.parseInt(tx2.getText());
            Integer res;
            res = num1 - num2;
            tx3.setText(String.format("%d", res));

        });
        b3.setOnAction(e -> {

            Integer num1 = Integer.parseInt(tx1.getText());
            Integer num2 = Integer.parseInt(tx2.getText());
            Integer res;
            res = num1 / num2;
            tx3.setText(String.format("%d", res));

        });
        b4.setOnAction(e -> {

            Integer num1 = Integer.parseInt(tx1.getText());
            Integer num2 = Integer.parseInt(tx2.getText());
            Integer res;
            res = num1 * num2;
            tx3.setText(String.format("%d", res));

        });

    }

    public static void main(String[] args) {
        launch(args);
    }

}

首先,您需要創建一個控制器類並在其中聲明您的按鈕:

主控制器.java

public class MainController implements Initializable {
    
    @FXML
    private Button button1;
    
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        System.out.println("The document loaded!!!");
        
        button1.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("button1 clicked!!");
            }
        });
        
    }

}

將控制器鏈接到您的 FXML 文件( fx:controller="ma.desktop.MainController" ):

主布局文件

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

<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.Pane?>

<Pane fx:controller="ma.desktop.MainController" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="472.0" prefWidth="692.0" xmlns="http://javafx.com/javafx/15.0.1" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Button fx:id="button1" layoutX="65.0" layoutY="14.0" mnemonicParsing="false" text="Button" textFill="#19d713" />
   </children>
</Pane>

最后,在應用程序類上加載 FXML 文件:

應用程序.java

public class App extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {

        Pane pane = FXMLLoader.load(getClass().getResource("MainLayout.fxml"));

        Scene scene = new Scene(pane);
        primaryStage.setScene(scene);
        primaryStage.show();

    }

}

注意:我使用 Scene Builder 作為 FXML 文件的編輯器

快樂編碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM