我正在编写一个简单的程序来将 a 的值绑定到节点ChoiceBox
的字体值。Label
但是,我无法做到这一点。
应用程序
package mybinding;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.SceneBuilder;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ChoiceBoxBuilder;
import javafx.scene.control.Label;
import javafx.scene.control.LabelBuilder;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.GridPaneBuilder;
import javafx.stage.Stage;
public class SimpleBindingMain extends Application{
Label simpleLabel;
ChoiceBox availableFonts;
GridPane gridPane;
SimpleBindingModel model = new SimpleBindingModel();
Scene scene;
@Override
public void start(Stage stage) throws Exception {
availableFonts = ChoiceBoxBuilder
.create()
.items(model.fonts)
.build();
simpleLabel = LabelBuilder
.create()
.text("Font Preview")
.font(model.theFont)
.build();
gridPane = GridPaneBuilder.create().build();
gridPane.add(simpleLabel,0,0);
gridPane.add(availableFonts,0,1);
model.fontSelectionModel = availableFonts.getSelectionModel();
model.addFontSelectionListener();
scene = SceneBuilder
.create()
.root(gridPane)
.build();
/**
* ADD BINDING CODE
*/
stage.setScene(scene);
stage.sizeToScene();
stage.show();
}
public static void main(String[] args) {
Application.launch("mybinding.SimpleBindingMain");
}
}
该模型
package mybinding;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.SingleSelectionModel;
import javafx.scene.text.Font;
public class SimpleBindingModel {
public StringProperty string = new SimpleStringProperty(); // the actual text
public IntegerProperty textSize = new SimpleIntegerProperty(); // the size of the text
public ObservableList fonts = FXCollections.observableArrayList( // possible fonts
"DejaVu Sans Mono",
"Nimbus Sans L",
"Ubuntu",
"Ubuntu Condensed"
);
public Font theFont = Font.font("DejaVu Sans Mono",18); // default font
public SingleSelectionModel fontSelectionModel;
public void addFontSelectionListener(){
fontSelectionModel.selectedIndexProperty().addListener(new ChangeListener(){
@Override
public void changed(ObservableValue value, Object oldValue, Object newValue) {
int selectedFontIndex = fontSelectionModel.selectedIndexProperty().getValue();
theFont = Font.font((String)fonts.get(selectedFontIndex),12);
}
});
}
}
请帮我解决绑定代码。