我已经在一个FXML文件中的Label和相关控制器中的IntegerProperty之间建立了数据绑定。问题是,尽管标签在初始化时被设置为正确的值,但当属性的值发生变化时,它不会更新。
FXML文件
<?xml version="1.0" encoding="UTF-8"?>
<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<GridPane xmlns:fx="http://javafx.com/fxml"
fx:controller="application.PaneController" minWidth="200">
<Label id="counterLabel" text="${controller.counter}" />
<Button translateX="50" text="Subtract 1"
onAction="#handleStartButtonAction" />
</GridPane>
控制器
package application;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.binding.Bindings;
import javafx.beans.property.*;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
public class PaneController implements Initializable
{
private IntegerProperty counter;
public int getCounter()
{
return counter.get();
}
public void setCounter(int value)
{
counter.set(value);
}
public PaneController()
{
counter = new SimpleIntegerProperty(15);
}
@Override
public void initialize(URL url, ResourceBundle resources)
{
}
@FXML
private void handleStartButtonAction(ActionEvent event)
{
setCounter(getCounter() - 1);
System.out.println(getCounter());
}
}
期望
每次我按下“减1”按钮,计数器将自动减1,并且计数器标签将自动更新。
现实
计数器确实减少了1,但计数器标签仍停留在15(初始值)。
问题
我原本以为(例如,从这个论坛帖子中获得的信息)我所做的应该有效。我漏掉了什么?
${controller.counterProperty}
。如果我将其保留为${controller.counter}
,它就可以工作了。非常感谢! - devuxergetCounter()
和setCounter()
的定义(直接使用counter
字段),它会失败。这是否意味着控制器上的getter/setter被绑定机制使用?(出乎意料的是,我需要为属性提供getter以及为属性值提供getter/setter。) - devuxer