// Pane background colors
ObjectProperty<Paint> paneColor = new SimpleObjectProperty<>(Color.TRANSPARENT);
ObjectProperty<Background> paneBackground = new SimpleObjectProperty<>(new Background(new
BackgroundFill(paneColor.get(), CornerRadii.EMPTY, Insets.EMPTY)));
ObjectProperty<Paint> paneBorderColor = new SimpleObjectProperty<>(Paint.valueOf("#c9d4cc"));
controller.getBackgroundPane().backgroundProperty().bind(paneBackground);
controller.getBackgroundPane().setStyle("-fx-border-color: " + paneBorderColor.get());
public Paint getPaneColor() {
return paneColor.get();
}
public void setPaneColor(Paint color) {
this.paneColor.set(color);
}
public Paint getPaneBorderColor() {
return this.paneBorderColor.get();
}
public void setPaneBorderColor(Paint color) {
this.paneBorderColor.set(color);
}
public Background getPaneBackgroundColor() {
return this.paneBackground.get();
}
public void setPaneBackgroundColor(Background background) {
this.paneBackground.set(background);
}
下面是我的代码:
StringProperty paneBorderColor = new SimpleStringProperty("#c9d4cc");
controller.getBackgroundPane().styleProperty().bind(Bindings.createStringBinding(() ->
"-fx-border-color: " + paneBorderColor.get() + "; -fx-border-width: 2px 0px 2px 0px",
paneBorderColor));
public String getPaneBorderColor() {
return this.paneBorderColor.get();
}
public void setPaneBorderColor(String color) {
this.paneBorderColor.set(color);
}
如果在场景生成器中更改颜色属性时没有发生效果,则说明绑定不正确。可以使用bindings.createobjectbinding(...)
。下面是其工作原理的一个示例:
编辑:添加边框颜色和宽度的示例。
控制器:
package custom.control;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.binding.Bindings;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.geometry.Insets;
import javafx.scene.layout.*;
import javafx.scene.paint.Paint;
public class Controller implements Initializable {
@FXML
private Pane pane;
private final ObjectProperty<Paint>
backgroundColor = new SimpleObjectProperty<>(),
borderColor = new SimpleObjectProperty<>();
private final DoubleProperty
borderWidth = new SimpleDoubleProperty();
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
// Binding for background color:
pane.backgroundProperty().bind(Bindings.createObjectBinding(() ->
new Background(new BackgroundFill(backgroundColor.get(),
CornerRadii.EMPTY, Insets.EMPTY)),
backgroundColor));
// Binding for border color and width:
pane.borderProperty().bind(Bindings.createObjectBinding(() ->
new Border(new BorderStroke(borderColor.get(),
BorderStrokeStyle.SOLID,
CornerRadii.EMPTY,
new BorderWidths(borderWidth.get()))),
borderColor, borderWidth));
}
public ObjectProperty<Paint> backgroundColorProperty() {
return backgroundColor;
}
public ObjectProperty<Paint> borderColorProperty() {
return borderColor;
}
public DoubleProperty borderWidthProperty() {
return borderWidth;
}
}
CustomPane:
package custom.control;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.fxml.FXMLLoader;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import java.io.IOException;
public class CustomPane extends AnchorPane {
private final ObjectProperty<Paint>
backgroundColor = new SimpleObjectProperty<>(Color.BLACK),
borderColor = new SimpleObjectProperty<>(Color.RED);
private final DoubleProperty
borderWidth = new SimpleDoubleProperty(3);
public CustomPane() {
super();
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("custom-pane.fxml"));
Controller controller = new Controller();
loader.setController(controller);
Pane root = loader.load();
this.getChildren().add(root);
AnchorPane.setTopAnchor(root, 0d);
AnchorPane.setRightAnchor(root, 0d);
AnchorPane.setBottomAnchor(root, 0d);
AnchorPane.setLeftAnchor(root, 0d);
controller.backgroundColorProperty().bind(backgroundColor);
controller.borderWidthProperty().bind(borderWidth);
controller.borderColorProperty().bind(borderColor);
} catch (IOException e) {
e.printStackTrace();
}
}
public Paint getBackgroundColor() {
return backgroundColor.get();
}
public ObjectProperty<Paint> backgroundColorProperty() {
return backgroundColor;
}
public void setBackgroundColor(Paint backgroundColor) {
this.backgroundColor.set(backgroundColor);
}
public Paint getBorderColor() {
return borderColor.get();
}
public ObjectProperty<Paint> borderColorProperty() {
return borderColor;
}
public void setBorderColor(Paint borderColor) {
this.borderColor.set(borderColor);
}
public double getBorderWidth() {
return borderWidth.get();
}
public DoubleProperty borderWidthProperty() {
return borderWidth;
}
public void setBorderWidth(double borderWidth) {
this.borderWidth.set(borderWidth);
}
}
FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.Pane?>
<Pane fx:id="pane" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" />
场景生成器预览:
if绑定 if绑定应用在页面元素中,并通过表达式判断是否为元素添加子元素的绑定。if绑定在功能上非常像visible绑定,但在实现上却有很大的不同。visible绑定是为元素添加css样式来控制元素是否显示,if绑定是控制元素的字元素,如果表达式为true,则为元素添加子元素,否则清空子元素。 示例代码: //.W片段 <label> <input type="checkbox" bind-c
诸如本地变量、实例变量、self一类的实体……或者说所有于对象绑定的名称。我们把他们称为绑定(bindings)。 下面内容摘自紫苏的博客,该文对我们的讨论很有意义。 在计算机科学中,“绑定”(Binding)一词是指一个更复杂、更大型的物件的引用的创建。例如当我们编写了一个函数,这个函数名就绑定了该函数本体,我们可以通过函数名来引用并调用该函数,这被称为名称绑定;又如当Ruby通过API去调用了
问题内容: 在Python中,有没有办法绑定未绑定的方法而不调用它? 我正在编写一个程序,对于某个类,我决定将所有按钮的数据分组为类级别的元组列表是一件好事,如下所示: 问题是,因为所有的值r都是未绑定方法,所以我的程序爆炸得很厉害,我哭了。 我正在网上寻找解决方案,该方案应该是一个相对直接,可解决的问题。不幸的是我找不到任何东西。现在,我正在解决此问题,但是没有人知道是否存在一种干净,健康,Py
attr绑定是用来为html元素绑定属性值的,这种绑定非常有用,例如我们需要想一个元素添加title属性,或者为img标签添加src属性。 示例代码: //.W片段 <a bind-attr="{ href: url, title: details }"> Report </a> //js片段 this.url=justep.Bind.observable("year-end.html"),
submit绑定只能用在form元素中,当form提交的时候被触发,并且默认阻止form的提交。因此我们通常在submit的处理函数中以ajax的方式提交form表单。 示例代码: //.W片段 <form bind-submit="doSomething"> ... form contents go here ... <button type="submit">Submit</butt
with绑定用来创建一个绑定上下文,在子元素内的所有绑定都在这个上下文中进行。 示例代码: //.W片段 <h1 bind-text="city"> </h1> <p bind-with="coords"> Latitude: <span bind-text="latitude"> </span>, Longitude: <span bind-text="longitude"> </span
foreach绑定用来处理数组,通常用来将一个数组绑定到一个列表或者table中。在foreach绑定中,我们可以使用if、with等嵌套绑定。 示例代码: //.W片段 <table> <thead> <tr><th>First name</th><th>Last name</th></tr> </thead> <tbody bind-foreach="people"> <tr>
selectedOptions绑定用在select元素中,用来绑定已选中的对象,通常被用在多选列表中。如果列表为单选列表(下拉列表),选中值可以用value绑定。 示例代码 //.W片段 <p> Choose some countries you'd like to visit: <select bind-options="availableCountries" bind-selectedO