首页 > 解决方案 > JavaFX - 如何为选项卡内的文本字段设置值?

问题描述

我正在尝试为选项卡内的文本字段设置值。我有多个选项卡,我想为每个选项卡内的文本字段设置值。关于如何在选项卡内设置文本字段的文本的任何想法?我正在使用下面的代码来更新文本字段的值,但是在尝试执行相同操作时没有发生任何事情。

代码:

public class FXMLController {
    @FXML
    private Button inputXmlFileBtn;
    @FXML
    private TextField inputXmlName;
    @FXML
    private TabPane xmlData;
    @FXML
    private Tab vendorHeaderFb;
    @FXML
    private TextField vendorHeader1;
    Label label;

    public String inputXmlFileChooser() throws ParserConfigurationException,
            SAXException, IOException, JAXBException {
        FileChooser fileChooser = new FileChooser();
        // Set extension filter
        fileChooser.getExtensionFilters().addAll(
                new ExtensionFilter("XML files (*.xml)", "*.xml"));

        // Open Dialog
        File file = fileChooser.showOpenDialog(null);
        String xmlPath = "";
        xmlPath = file.getPath();

        // Set the path for inputXmlName text field
        if (file != null) {
            inputXmlName.setText(xmlPath);
        }

        //Unmarshall
        label = this.unmarshallXml();
        System.out.println(label.getVendorHeader1());
        vendorHeaderFb = new Tab();
        vendorHeader1 = new TextField();
        vendorHeader1.setText(label.getVendorHeader1());
        vendorHeaderFb.setContent(vendorHeader1);
        return xmlPath;
    }

更新了代码,包括 FXML 的 Pojo 类。

public class FXMLController {
    @FXML
    private Button inputXmlFileBtn;
    @FXML
    private TextField inputXmlName;
    @FXML
    private TabPane xmlData;
    @FXML
    private Tab vendorHeaderFb;
    @FXML
    private TextField VendorHeader1;
    Label label;

    public String inputXmlFileChooser() throws ParserConfigurationException,
            SAXException, IOException, JAXBException {
        FileChooser fileChooser = new FileChooser();
        // Set extension filter
        fileChooser.getExtensionFilters().addAll(
                new ExtensionFilter("XML files (*.xml)", "*.xml"));

        // Open Dialog
        File file = fileChooser.showOpenDialog(null);
        String xmlPath = "";
        xmlPath = file.getPath();

        // Set the path for inputXmlName text field
        if (file != null) {
            inputXmlName.setText(xmlPath);
        }

        //Unmarshall
        label = this.unmarshallXml();
        System.out.println(label.getVendorHeader1());
        FXMLProps fxmlProps = new FXMLProps();
        fxmlProps.setVendorHeader1(label.getVendorHeader1());
        System.out.println(fxmlProps.getVendorHeader1());
        VendorHeader1 = new TextField();
        VendorHeader1.setText(fxmlProps.getVendorHeader1());
        //vendorHeaderFb.setContent(vendorHeader1);
        //vendorHeader1.setText(label.getVendorHeader1());
        //vendorHeaderFb.setContent(vendorHeader1);


        return xmlPath;
    }

POJO/属性类

public class FXMLProps {
    private final SimpleStringProperty VendorHeader1 = new SimpleStringProperty(
            "");

    public FXMLProps() {
    }

    public FXMLProps(String VendorHeader1) {
        setVendorHeader1(VendorHeader1);
    }

    public String getVendorHeader1() {
        return VendorHeader1.get();
    }

    public void setVendorHeader1(String vH1) {
        VendorHeader1.set(vH1);
    }
}

我仍然无法设置文本字段 vendorHeader1 的值。有人可以指出出了什么问题吗?

标签: javajavafxfxml

解决方案


您必须Binding在 the 的 text 属性TextFieldSimpleStringProperty用于该值的 the 之间应用 a 。您必须以启用其他类中的选项FXMLProps的方式将您的供应商标头属性设为公开:Binding

public class FXMLProps {

    private final SimpleStringProperty vendorHeader = new SimpleStringProperty("");

    public FXMLProps() {}

    public FXMLProps(String vendorHeader) {
        setVendorHeader(vendorHeader);
    }

    public String getVendorHeader() {
        return VendorHeader1.get();
    }

    public void setVendorHeader(String vendorHeaderText) {
        vendorHeader.set(vendorHeaderText);
    }

    // this is needed for the Binding
    public final SimpleStringProperty vendorHeaderProperty() {
        return vendorHeader;
    }
}

然后在你的应用程序的某个地方(也许在start())你需要创建Binding类似的

// bind those two properties (TextField, SimpleStringProperty)
Bindings.bindBidirectional(vendorHeader1.textProperty(), fxmlProps.vendorHeaderProperty());

推荐阅读