为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法在控制器中初始化变量,并在 FXML 中使用它?

有没有办法在控制器中初始化变量,并在 FXML 中使用它?

凤凰求蛊 2022-12-28 14:27:10
所以,我在 FXML 中制作了一个菜单并且我正在使用一个组所以我必须设置一个 prefWidth 否则它看起来很奇怪。为此,我想在控制器中用屏幕宽度初始化一个变量,然后在 FXML 中设置菜单时使用宽度变量。但我就是找不到办法做到这一点。概括这个问题,我想在控制器中初始化一个变量,然后像这样在 FXML 中使用它:[控制器]package sample;import javafx.fxml.Initializable;import java.net.URL;import java.util.ResourceBundle;public class Controller implements Initializable {    @Override    public void initialize (URL url, ResourceBundle resourceBundle) {        String text = "test";    }}[FXML]<?import javafx.scene.control.Label?><?import javafx.scene.BorderPane?><BorderPane>    <center>        <label text="<!--use var 'text' here-->"/>    </center></BorderPane>我知道,还有其他方法可以做到这一点(比如识别它并在控制器中设置文本)但我只是想看看是否可以这样做。
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

FXMLLoader可以将 FXML 中的属性绑定到控制器中的另一个属性。因此,您可以在控制器中定义一个属性并使用其名称访问它的 FXML。


控制器:


public class Controller implements Initializable {

    private StringProperty title = new SimpleStringProperty(this, "title", "");

    public final StringProperty titleProperty() {

        return title;

    }


    public final void setTitle(String value) { 

        titleProperty().setValue(value); 

    }


    public final String getTitle() { 

        return title.getValue(); 

    }


    @Override

    public void initialize(URL location, ResourceBundle resources) {

        setTitle("test");

    }

}

动态XML:


<BorderPane>

    <center>

        <label text="${controller.title}"/>

    </center>

</BorderPane>

请注意,为了FXMLLoader创建绑定,属性应该像示例中那样具有修改器和访问器。


查看完整回答
反对 回复 2022-12-28
?
忽然笑

TA贡献1806条经验 获得超5个赞

使用属性代替变量。将它放在类级别。


public class Controller implements Initializable {


    private String text; // or use binding property


    public String getText() {

        return text;

    }


    public void setText(String text) {

        this.text = text;

    }


    @Override

    public void initialize(URL location, ResourceBundle resources) {

        text = "hello";

    }

}

FXML


<BorderPane fx:controller="sample.Controller"

            xmlns:fx="http://javafx.com/fxml">


    <center>

        <Label text="${controller.text}"/>


    </center>

</BorderPane>


查看完整回答
反对 回复 2022-12-28
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

尝试绑定。


首先,给标签添加一个 id:


<Label fx:id="label" />

然后,在视图的Controller中声明它:


@FXML

private Label label;

现在您必须为您的变量创建一个 StringProperty:


private final StringProperty text = new SimpleStringProperty();

最后,添加绑定:


label.textProperty().bind(text);

text.set("test");


查看完整回答
反对 回复 2022-12-28
  • 3 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信