[英]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.