gpt4 book ai didi

javafx - fxml:如何处理 Controller 中的按钮 Action ?

转载 作者:行者123 更新时间:2023-12-04 10:53:09 30 4
gpt4 key购买 nike

我有一个最小的例子:Controller、main、fxml 文件,带有一个按钮和两个 textArea(s),一个输入,另一个输出。按下按钮时,输入会打印在输出中。当我在 fxml (onAction="#printOutput") 中插入按钮的 Action 时,它工作正常。
我想知道如何(以及为什么不这样做)我可以在 Controller 中执行相同的操作而不必处理 fxml。注意:我来自 Android,我避免在 xml 中实现相同的内容,因为调试非常困难,而且它不提供灵活性。文件如下:

Controller

public class FxFXMLController {
@FXML private TextField inputText;
@FXML private TextArea outputText;
@FXML private Button okBtn;

//Do I connect here an okBtn.setAction() with printOutput? if not, where?
public FxFXMLController() {
// Nothing
}

@FXML
private void printOutput() {
// insert this into outputText in fxml file: onAction="#printOutput"
outputText.setText(inputText.getText());
}
}


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

@Override
public void start(Stage stage) throws IOException {
FXMLLoader loader = new FXMLLoader();
VBox root = (VBox) loader.load((getClass().getResource("FxFXMLExample3.fxml")));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("A FXML Example with a Controller");
stage.show();
}
}

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

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<VBox fx:id="vbox" layoutX="10.0" layoutY="10.0" prefHeight="250.0" prefWidth="300.0" spacing="10" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.FxFXMLController">
<style>
-fx-padding: 10;
-fx-border-style: solid inside;
-fx-border-width: 2;
-fx-border-insets: 5;
-fx-border-radius: 5;
-fx-border-color: blue;
</style>

<Label fx:id="inputLbl" alignment="CENTER_LEFT" cache="true" cacheHint="SCALE" prefHeight="30.0" prefWidth="200.0" text="Please insert Your Input here:" textAlignment="LEFT" />
<TextField fx:id="inputText" prefWidth="100.0" />
<Button fx:id="okBtn" alignment="CENTER_RIGHT" contentDisplay="CENTER" mnemonicParsing="false" text="OK" textAlignment="CENTER" />
<Label fx:id="outputLbl" alignment="CENTER_LEFT" cache="true" cacheHint="SCALE" prefHeight="30.0" prefWidth="200.0" text="Your Input:" textAlignment="LEFT" />
<TextArea fx:id="outputText" prefHeight="100.0" prefWidth="200.0" wrapText="true" />
</VBox>

最佳答案

您可以使用 initialize 函数在按钮上注册一个新的事件监听器
然后你可以在那个听众中做任何你想做的事情。
这是代码:

public class FxFXMLController {
@FXML private TextField inputText;
@FXML private TextArea outputText;
@FXML private Button okBtn;

@FXML
public void initialize() {
okBtn.setOnAction(event -> {
this.printOutput();
});
}

public FxFXMLController() {
// Nothing
}

@FXML
private void printOutput() {
// insert this into outputText in fxml file: onAction="#printOutput"
outputText.setText(inputText.getText());
}
}

关于javafx - fxml:如何处理 Controller 中的按钮 Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59369930/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com