Java 类javafx.beans.binding.When 实例源码
项目:truffle-hog
文件:NodeRenderer.java
@Override
public void setParent(IComposition parent) {
this.parent = parent;
final FilterPropertiesComponent fpc = parent.getComponent(FilterPropertiesComponent.class);
// TODO maybe make this more error prone
if (fpc != null) {
Platform.runLater(() -> {
shape.fillProperty().unbind();
shape.fillProperty().bind(new When(fpc.hasColorProperty()).then(fpc.activeColorProperty()).otherwise(colorPicked));
});
}
}
项目:jfx.radialmenu
文件:RadialMenuSectionDynamic.java
public RadialItem addItem(MenuItem item) {
final DoubleExpression idx = new SimpleDoubleProperty(items.size());
final NumberExpression itemRange = new When(params.directionProperty().isEqualTo(Direction.CW))
.then(idx.divide(itemsCount.subtract(1)))
.otherwise(itemsCount.subtract(idx.add(1)).divide(itemsCount.subtract(1)));
final DoubleExpression itemAngleDeg = correctedStreakAngleDeg.add(angularTotalSizeDeg.multiply(itemRange)).subtract(angularTotalSizeDeg.multiply(0.5));
final RadialItem itemButton = new RadialItem(params, item.getGraphic(), item.getText(), this, itemAngleDeg,
(parentSection != null) ? parentSection.nominalRadius : new SimpleDoubleProperty(0),
(item instanceof Menu));
items.add(itemButton);
radialPane.getChildren().add(itemButton);
return itemButton;
}
项目:jedai-ui
文件:WizardController.java
private void initButtons() {
btnBack.disableProperty().bind(currentStep.lessThanOrEqualTo(0));
btnNext.disableProperty().bind(currentStep.greaterThanOrEqualTo(steps.size() - 1));
btnCancel.textProperty().bind(
new When(currentStep.lessThan(steps.size() - 1))
.then("Cancel")
.otherwise("Start Over")
);
}
项目:jedai-ui
文件:WizardController.java
private Circle createIndicatorCircle(int i) {
Circle circle = new Circle(INDICATOR_RADIUS, Color.WHITE);
circle.setStroke(Color.BLACK);
circle.fillProperty().bind(
new When(
currentStep.greaterThanOrEqualTo(i))
.then(Color.DODGERBLUE)
.otherwise(Color.WHITE));
return circle;
}
项目:shuffleboard
文件:FxUtils.java
/**
* A more general version of {@link Bindings#when(ObservableBooleanValue)}
* that can accept general boolean properties as conditions.
*
* @param condition the condition to bind to
*
* @see Bindings#when(ObservableBooleanValue)
*/
public static When when(Property<Boolean> condition) {
if (condition instanceof ObservableBooleanValue) {
return Bindings.when((ObservableBooleanValue) condition);
}
SimpleBooleanProperty realCondition = new SimpleBooleanProperty();
realCondition.bind(condition);
return Bindings.when(realCondition);
}
项目:H-Uppaal
文件:QueryPresentation.java
private void initializeProgressIndicator() {
// Find the progress indicator
final JFXSpinner progressIndicator = (JFXSpinner) lookup("#progressIndicator");
// If the query is running show the indicator, otherwise hide it
progressIndicator.visibleProperty().bind(new When(query.queryStateProperty().isEqualTo(QueryState.RUNNING)).then(true).otherwise(false));
}
项目:CleanBT
文件:EditorApp.java
private void initMenu() {
Menu fileMenu = new Menu(EditorConfig.MENU_FILE);
MenuItem openFile = new MenuItem(EditorConfig.MENU_FILE_OPEN);
FontAwesomeIconView openView = new FontAwesomeIconView(FontAwesomeIcon.FOLDER_OPEN);
openFile.setGraphic(openView);
MenuItem saveFile = new MenuItem(EditorConfig.MENU_FILE_SAVE);
FontAwesomeIconView saveView = new FontAwesomeIconView(FontAwesomeIcon.SAVE);
saveFile.setGraphic(saveView);
fileMenu.getItems().addAll(openFile, saveFile);
Menu toolMenu = new Menu(EditorConfig.MENU_TOOL);
MenuItem randomName = new MenuItem(EditorConfig.MENU_TOOL_RANDOM);
BooleanBinding when = new When(Bindings.createBooleanBinding(() -> torrentProperty.getValue() == null, torrentProperty)).then(true).otherwise(false);
randomName.disableProperty().bind(when);
saveFile.disableProperty().bind(when);
centerBtn.visibleProperty().bind(when);
fileTree.visibleProperty().bind(when.not());
toolMenu.getItems().add(randomName);
menuBar.setBackground(new Background(new BackgroundFill(Color.TRANSPARENT, null, null)));
menuBar.getMenus().addAll(fileMenu, toolMenu);
openFile.setOnAction(event -> openFile());
saveFile.setOnAction((event) -> saveFile());
randomName.setOnAction(event -> randomNameAll(itemRoot));
}
项目:java_fx_node_link_demo
文件:NodeLink.java
@FXML
private void initialize() {
mControlOffsetX.set(100.0);
mControlOffsetY.set(50.0);
mControlDirectionX1.bind(new When (
node_link.startXProperty().greaterThan(node_link.endXProperty()))
.then(-1.0).otherwise(1.0));
mControlDirectionX2.bind(new When (
node_link.startXProperty().greaterThan(node_link.endXProperty()))
.then(1.0).otherwise(-1.0));
node_link.controlX1Property().bind(
Bindings.add(
node_link.startXProperty(), mControlOffsetX.multiply(mControlDirectionX1)
)
);
node_link.controlX2Property().bind(
Bindings.add(
node_link.endXProperty(), mControlOffsetX.multiply(mControlDirectionX2)
)
);
node_link.controlY1Property().bind(
Bindings.add(
node_link.startYProperty(), mControlOffsetY.multiply(mControlDirectionY1)
)
);
node_link.controlY2Property().bind(
Bindings.add(
node_link.endYProperty(), mControlOffsetY.multiply(mControlDirectionY2)
)
);
}
项目:examples-javafx-repos1
文件:WizardController.java
private void initButtons() {
btnBack.disableProperty().bind( currentStep.lessThanOrEqualTo(0) );
btnNext.disableProperty().bind( currentStep.greaterThanOrEqualTo(steps.size()-1) );
btnCancel.textProperty().bind(
new When(
currentStep.lessThan(steps.size()-1)
)
.then("Cancel")
.otherwise("Start Over")
);
}
项目:examples-javafx-repos1
文件:WizardController.java
private Circle createIndicatorCircle(int i) {
Circle circle = new Circle(INDICATOR_RADIUS, Color.WHITE);
circle.setStroke(Color.BLACK);
circle.fillProperty().bind(
new When(
currentStep.greaterThanOrEqualTo(i))
.then(Color.DODGERBLUE)
.otherwise(Color.WHITE));
return circle;
}
项目:Introspect-Framework
文件:RfxTabButton.java
public RfxTabButton(RfxWindow rfxWindow, View tab) {
super(tab.getViewTitle());
this.rfxWindow = rfxWindow;
this.tab = tab;
setButtonType(ButtonType.FLAT);
setMinHeight(HEIGHT);
setPadding(new Insets(0, PADDING, 0, PADDING));
setMaxWidth(MAX_WIDTH);
When whenTabSelected = Bindings.when(rfxWindow.getSelectedTabProperty().isEqualTo(tab));
ObservableValue<String> styleBinding = createStyleBinding(whenTabSelected);
styleProperty().bind(styleBinding);
setOnAction(this::onAction);
}
项目:Introspect-Framework
文件:RfxTabButton.java
private ObservableValue<String> createStyleBinding(
When whenTabSelected) {
String selectedTabStyle = new RfxStyleProperties().setTextFill(MaterialColorSetCssName.PRIMARY.FOREGROUND1())
.setBorderWidth(0,0,4,0)
.setBorderColor(MaterialColorSetCssName.ACCENT.BACKGROUND())
.setFont(MaterialFont.getBody2(DisplayScale.NONE_DENSE)).toString();
String unselectedTabStyle = new RfxStyleProperties().setTextFill(MaterialColorSetCssName.PRIMARY.FOREGROUND2())
.setBorderWidth(0,0,4,0)
.setBorderColor(MaterialColorSetCssName.PRIMARY.BACKGROUND())
.setFont(MaterialFont.getBody2(DisplayScale.NONE_DENSE)).toString();
ObservableValue<String> styleBinding=whenTabSelected.then(selectedTabStyle).otherwise(unselectedTabStyle);
return styleBinding;
}
项目:H-Uppaal
文件:TagPresentation.java
private void initializeLabel() {
final Label label = (Label) lookup("#label");
final JFXTextField textField = (JFXTextField) lookup("#textField");
final Path shape = (Path) lookup("#shape");
final Insets insets = new Insets(0,2,0,2);
textField.setPadding(insets);
label.setPadding(insets);
final int padding = 0;
label.layoutBoundsProperty().addListener((obs, oldBounds, newBounds) -> {
double newWidth = Math.max(newBounds.getWidth(), 10);
final double res = GRID_SIZE * 2 - (newWidth % (GRID_SIZE * 2));
newWidth += res;
textField.setMinWidth(newWidth);
textField.setMaxWidth(newWidth);
l2.setX(newWidth + padding);
l3.setX(newWidth + padding);
setMinWidth(newWidth + padding);
setMaxWidth(newWidth + padding);
textField.setMinHeight(TAG_HEIGHT);
textField.setMaxHeight(TAG_HEIGHT);
textField.focusedProperty().addListener((observable, oldFocused, newFocused) -> {
if (newFocused) {
shape.setTranslateY(2);
textField.setTranslateY(2);
}
});
if (getWidth() >= 1000) {
setWidth(newWidth);
setHeight(TAG_HEIGHT);
shape.setTranslateY(-1);
textField.setTranslateY(-1);
}
// Fixes the jumping of the shape when the text field is empty
if (textField.getText().isEmpty()) {
shape.setLayoutX(0);
}
});
label.textProperty().bind(new When(textField.textProperty().isNotEmpty()).then(textField.textProperty()).otherwise(textField.promptTextProperty()));
}
项目:H-Uppaal
文件:ChannelSenderArrowHead.java
private Label initializeLabel() {
final Label label = new Label();
// Add the caption text-size class, and make the text white
label.getStyleClass().addAll("caption", "white-text");
DoubleBinding lx = new DoubleBinding() {
{
super.bind(ax, bx, cx, label.widthProperty());
}
@Override
protected double computeValue() {
return (ax.get() + bx.get() + cx.get()) / 3 - label.widthProperty().get() / 2;
}
};
DoubleBinding ly = new DoubleBinding() {
{
super.bind(ay, by, cy, label.heightProperty());
}
@Override
protected double computeValue() {
return (ay.get() + by.get() + cy.get()) / 3 - label.heightProperty().get() / 2;
}
};
// Bind the label to the centroid of the triangle
label.layoutXProperty().bind(lx);
label.layoutYProperty().bind(ly);
// Display the label U - for urgent
label.setText("U");
// Bind the isUrgent stringBinder to hide and show the label
label.opacityProperty().bind(new When(isUrgent).then(1d).otherwise(0d));
// Rotate the label back so that it is always displayed as U
label.rotateProperty().bind(this.rotateProperty().multiply(-1));
return label;
}
项目:gluon-samples
文件:CommentsPresenter.java
public void initialize() {
comments.showingProperty().addListener((obs, oldValue, newValue) -> {
if (newValue) {
AppBar appBar = getApp().getAppBar();
appBar.setNavIcon(MaterialDesignIcon.MENU.button(e ->
getApp().showLayer(DRAWER_LAYER)));
appBar.setTitleText("Comments");
}
});
FloatingActionButton floatingActionButton = new FloatingActionButton();
floatingActionButton.textProperty().bind(new When(userProperty().isNotNull())
.then(MaterialDesignIcon.ADD.text)
.otherwise(MaterialDesignIcon.CLOUD_DOWNLOAD.text));
floatingActionButton.setOnAction(e -> {
if (service.getUser() == null) {
service.retrieveComments();
} else {
EDITION_VIEW.switchView();
}
});
comments.getLayers().add(floatingActionButton.getLayer());
commentsList.setCellFactory(cell -> {
final CommentListCell commentListCell = new CommentListCell(
service,
// left button: delete comment, only author's comment can delete it
c -> {
if (service.getUser().getNetworkId().equals(c.getNetworkId())) {
showDialog(c);
}
},
// right button: edit comment, everybody can view it, only author can edit it
c -> {
service.activeCommentProperty().set(c);
EDITION_VIEW.switchView();
});
// notify view that cell is sliding
sliding.bind(commentListCell.slidingProperty());
return commentListCell;
});
final Label label = new Label(SIGN_IN_MESSAGE);
label.textProperty().bind(new When(userProperty().isNotNull())
.then(NO_COMMENTS_MESSAGE)
.otherwise(SIGN_IN_MESSAGE));
commentsList.setPlaceholder(label);
commentsList.disableProperty().bind(service.userProperty().isNull());
commentsList.setItems(service.commentsProperty());
comments.addEventHandler(LifecycleEvent.SHOWN, new EventHandler<LifecycleEvent>() {
@Override
public void handle(LifecycleEvent event) {
comments.removeEventHandler(LifecycleEvent.SHOWN, this);
service.retrieveComments();
}
});
// block scrolling when sliding
comments.addEventFilter(ScrollEvent.ANY, e -> {
if (sliding.get() && e.getDeltaY() != 0) {
e.consume();
}
});
}
项目:jfx.radialmenu
文件:RadialMenuSectionDynamic.java
public RadialMenuSectionDynamic(Params params, RadialPane radialPane, RadialMenuSectionDynamic parentSection, DoubleExpression streakAngleDeg) {
this.params = params;
this.radialPane = radialPane;
this.parentSection = parentSection;
this.radialPane.addRadialSection(this);
if (streakAngleDeg != null) {
this.streakAngleDeg.bind(streakAngleDeg);
} else {
this.streakAngleDeg.bind(params.angleFromDegProperty()
.add(params.angleToDegProperty().subtract(params.angleFromDegProperty()).multiply(0.5d)));
}
itemsCount = new SimpleListProperty<>(items).sizeProperty();
final DoubleExpression itemRadiusHalf = params.buttonSizeProperty().multiply(0.5);
if (parentSection != null) {
innerRadius.bind(parentSection.outerRadiusProperty().add(itemRadiusHalf.multiply(params.spacingFactorProperty().multiply(2))));
} else {
innerRadius.bind(params.minRadiusProperty());
}
final DoubleExpression angleDeg = params.angleToDegProperty().subtract(params.angleFromDegProperty());
final DoubleExpression angleRad = new FunctionDoubleBinding(Math::toRadians, angleDeg);
final DoubleExpression availablePerimeter = angleRad.multiply(innerRadius.add(itemRadiusHalf));
final DoubleExpression gapSize = params.buttonSizeProperty().multiply(params.gapFactorProperty());
final DoubleExpression allItemsSize = params.buttonSizeProperty().multiply(itemsCount.subtract(1));
final DoubleExpression totalSize = allItemsSize.add(gapSize.multiply(itemsCount.subtract(1)));
final NumberBinding candidateNominalRadius = new When(availablePerimeter.greaterThan(totalSize))
.then(innerRadius.add(itemRadiusHalf))
.otherwise(totalSize.divide(angleRad));
final DoubleExpression candidateAngularTotalSizeDeg = new FunctionDoubleBinding(Math::toDegrees, totalSize.divide(candidateNominalRadius));
final DoubleExpression candidateAngularItemSizeDeg = candidateAngularTotalSizeDeg.divide(itemsCount);
final DoubleExpression angularTotalSizeWithOverlapDeg = candidateAngularTotalSizeDeg.add(candidateAngularItemSizeDeg);
nominalRadius.bind(candidateNominalRadius.add(new When(angularTotalSizeWithOverlapDeg.greaterThan(TWO_PI))
.then(totalSize.divide(angularTotalSizeWithOverlapDeg.subtract(TWO_PI)))
.otherwise(0)));
angularTotalSizeDeg = new FunctionDoubleBinding(Math::toDegrees, totalSize.divide(nominalRadius));
// TODO: Make sure, that outerRadius is reasonably small to prevent "large texture" errors
outerRadius.bind(nominalRadius.add(itemRadiusHalf.add(params.buttonWidthOffsetProperty())));
params.centerOffsetProperty().add(outerRadius);
fromAngleDeg.bind(this.streakAngleDeg.subtract(angularTotalSizeDeg.multiply(0.5)));
toAngleDeg.bind(this.streakAngleDeg.add(angularTotalSizeDeg.multiply(0.5)));
correctedStreakAngleDeg.bind(this.streakAngleDeg.add(new When(fromAngleDeg.lessThan(params.angleFromDegProperty()))
.then(params.angleFromDegProperty().subtract(fromAngleDeg))
.otherwise(new When(toAngleDeg.greaterThan(params.angleToDegProperty()))
.then(params.angleToDegProperty().subtract(toAngleDeg))
.otherwise(0))));
toAngleDeg.bind(fromAngleDeg.add(angularTotalSizeDeg));
angularItemSizeDeg.bind(angularTotalSizeDeg.divide(itemsCount));
final Circle perimeter = setupPerimeter(params);
radialPane.getChildren().add(perimeter);
params.centerOffsetProperty().addListener(observable -> radialPane.layout());
totalSize.addListener((sender, oldV, newV) -> System.out.println(this + " [" + itemsCount.intValue() + "] totalSize: " + newV));
nominalRadius.addListener((sender, oldV, newV)-> System.out.println(this + " [" + itemsCount.intValue() + "] nominalRadius: " + newV));
angularTotalSizeDeg.addListener((sender, oldV, newV)-> System.out.println(this + " [" + itemsCount.intValue() + "] ang. size (deg): " + newV));
}
项目:Elegit
文件:Edge.java
/**
* Constructs a directed line between the source and target cells and binds
* properties to handle relocation smoothly
* @param source the source (parent) cell
* @param target the target (child) cell
*/
public Edge(Cell source, Cell target) {
this.source = source;
this.target = target;
this.addedMidPoints = false;
midLineX = new SimpleDoubleProperty(0);
DoubleBinding endX = source.translateXProperty().add(source.widthProperty().divide(2.0));
DoubleBinding endY = source.translateYProperty().add(source.heightProperty());
DoubleBinding startX = target.translateXProperty().add(target.widthProperty().divide(2.0));
DoubleBinding startY = target.translateYProperty().add(0);
path = new DirectedPath(startX, startY, endX, endY);
checkAndAddMidPoints(startY, endY);
path.addPoint(endX, endY.add(TreeLayout.V_SPACING / 4.));
source.translateXProperty().addListener((observable, oldValue, newValue) -> {
checkAndAddMidPoints(startY, endY);
});
target.translateYProperty().addListener((observable, oldValue, newValue) -> {
checkAndAddMidPoints(startY, endY);
});
source.translateXProperty().addListener((observable, oldValue, newValue) -> {
checkAndAddMidPoints(startY, endY);
});
target.translateYProperty().addListener((observable, oldValue, newValue) -> {
checkAndAddMidPoints(startY, endY);
});
// Change the X of the midpoints depending on whether the target is above, below, or at the same
// level as the source
midLineX.bind(new When(target.rowLocationProperty.subtract(source.rowLocationProperty).lessThan(0))
.then(new When(target.columnLocationProperty.subtract(source.columnLocationProperty).greaterThan(0))
.then(endX.add(TreeLayout.H_SPACING / 2.))
.otherwise(new When(target.columnLocationProperty.subtract(source.columnLocationProperty).lessThan(0))
.then(startX.add(TreeLayout.H_SPACING / 2.))
.otherwise(startX)))
.otherwise(new When(target.columnLocationProperty.subtract(source.columnLocationProperty).greaterThan(0))
.then(endX.add(TreeLayout.H_SPACING / 2.))
.otherwise(new When(target.columnLocationProperty.subtract(source.columnLocationProperty).lessThan(0))
.then(startX.add(TreeLayout.H_SPACING / 2.))
.otherwise(startX))));
if(source.getCellType() != Cell.CellType.BOTH || target.getCellType() != Cell.CellType.BOTH){
path.setDashed(true);
}
getChildren().add(path);
visible = new SimpleBooleanProperty(false);
visibleProperty().bind(source.visibleProperty().and(target.visibleProperty())
.and(allVisible.or(visible)));
source.edges.add(this);
target.edges.add(this);
}
项目:javafx-demos
文件:TriangleArea.java
public TriangleArea() {
initialize();
for(int i = 0; i < 3; i++) {
int j = (i == 2) ? 0 : i+1;
// Start and end positions of Line is bound by
// the vertices(the center position of Circles)
l[i].startXProperty().bind(c[i].centerXProperty());
l[i].startYProperty().bind(c[i].centerYProperty());
l[i].endXProperty().bind(c[j].centerXProperty());
l[i].endYProperty().bind(c[j].centerYProperty());
// center position of Circle is bound by
// the mouse clicked position
c[i].centerXProperty().bind(org_x[i]);
c[i].centerYProperty().bind(org_y[i]);
// Text of TextField is bound by the string form
// presenting the vertices(the center of Circles)
tx[i].textProperty().bind(map_x[i].asString("%2.1f"));
ty[i].textProperty().bind(map_y[i].asString("%2.1f"));
}
// the area of triangle is computed by the bound values
// by Circle positions
NumberBinding tmp_area =
map_x[0].multiply(map_y[1])
.add(map_x[1].multiply(map_y[2]))
.add(map_x[2].multiply(map_y[0]))
.subtract(map_x[0].multiply(map_y[2]))
.subtract(map_x[1].multiply(map_y[0]))
.subtract(map_x[2].multiply(map_y[1]))
.divide(2.0);
// the code for computing the absolute value using
// Class When and then() and otherwise() methods.
area = new When(tmp_area.lessThan(0))
.then(tmp_area.negate())
.otherwise(tmp_area);
// Text of Label presenting the area of triangle is
// bound by the string form the computing the area
area_Label.textProperty().bind(
new SimpleStringProperty("Area = ")
.concat(area.asString("%2.1f")));
}
项目:junit
文件:TestResultsController.java
public ObjectBinding<Image> selectedRun_resultImage() {
return new When(selectedRun_isSuccessful()).then(IMAGE_TEST_SUCCESS).otherwise(IMAGE_TEST_FAILURE);
}