gpt4 book ai didi

java - 从 javafx 中的另一个窗口设置 TextField 的值

转载 作者:行者123 更新时间:2023-11-29 15:35:50 24 4
gpt4 key购买 nike

我在 Action 上设置了一个 TextField(按 Enter)来打开另一个 fxml 窗口,该窗口显示一个选择表(数百个选择)。基本上我需要第二个窗口来设置第一个窗口上文本字段的文本。

@FXML //this pops out a 2nd window where i can choose a person. Set from Scene Builder
private void pickperson(ActionEvent event) throws IOException {
Parent parent = FXMLLoader.load(getClass().getResource("/fxml/personpicker.fxml"));
Scene scene = new Scene(parent);
Stage stage = new Stage();
stage.setScene(scene);
stage.centerOnScreen();
stage.show();
}

@FXML //when i click "use selected" this gets executed
private void use(ActionEvent event) {
Person person0 = table.getSelectionModel().getSelectedItem();
int id = person0.getId();
String name = person0.getNAME();
final Clipboard clipboard = Clipboard.getSystemClipboard();
final ClipboardContent content = new ClipboardContent();
content.putString(Integer.toString(id)); //i tried clipboard but when i paste, nothing is pasted
Stage stage = (Stage) useselected.getScene().getWindow();//closes the window
stage.close();
}

我在第二个窗口上有一个表格,上面有一个标签为“使用所选”的按钮。我想做到这一点,以便单击“使用所选内容”时,窗口关闭,同时从选择中设置文本字段。

编辑:我通过添加

使剪贴板正常工作
Clipboard.getSystemClipboard().setContent(content);

现在,我只需在窗口关闭后直接粘贴该值即可;就像按下 CRTL+V 一样。

最佳答案

根据您的代码,“父级”Stage(即包含 TextField 的舞台)是显示三个按钮。因此你可以简单地调用方法getOwner()在子 Stage 中以便访问父 Stage。一旦获得了父 Stage 的引用,您就可以访问其节点并操作它们。

我只更改了您代码中的两个文件。

  1. Parent.fxml - 我将 id 属性添加到 TextField
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="266.0" prefWidth="394.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="test.ParentController">
<children>
<TextField id="txtFld" layoutX="123.0" layoutY="121.0" onAction="#picker" />
<Label layoutX="140.0" layoutY="86.0" text="Press enter to choose" />
</children>
</AnchorPane>
  • ChildController.java - 我添加了方法handleEvent(int)
  • package test;

    import java.net.URL;
    import java.util.ResourceBundle;

    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.fxml.Initializable;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.TextField;
    import javafx.scene.layout.AnchorPane;
    import javafx.stage.Stage;

    public class ChildController implements Initializable {
    @FXML
    AnchorPane ap;
    @FXML
    private Button btnone;
    @FXML
    private Button btntwo;
    @FXML
    private Button btnthree;

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

    @FXML
    private void one(ActionEvent event) {
    handleEvent(1);
    }

    @FXML
    private void two(ActionEvent event) {
    handleEvent(2);
    }

    @FXML
    private void three(ActionEvent event) {
    handleEvent(3);
    }

    private void handleEvent(int chosenNumber) {
    Stage stage = (Stage) ap.getScene().getWindow();
    Stage owner = (Stage) stage.getOwner();
    Scene scene = owner.getScene();
    Parent root = scene.getRoot();
    TextField txtFld = (TextField) root.lookup("#txtFld");
    txtFld.setText(String.valueOf(chosenNumber));
    stage.close();
    }
    }

    关于java - 从 javafx 中的另一个窗口设置 TextField 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58248308/

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