java - 在 JavaFX 中使用大括号进行父组织

标签 java javafx curly-braces

我正在用 JavaFX 编写用户界面并且不希望使用 FXML。如下使用牙套组织 child 是否传统有效?大括号除了让代码看起来更好之外没有任何用处。编译时大括号会被完全优化掉吗?

HBox top = new HBox();
{
    Label white = new Label("White");
    white.getStyleClass().addAll("white-check");
    white.setMinWidth(160);
    white.setMinHeight(60);

    Label lightGray = new Label("Light Gray");
    lightGray.getStyleClass().addAll("lightgray-check");
    lightGray.setMinWidth(160);
    lightGray.setMinHeight(60);

    top.getChildren().addAll(white, lightGray);
}

如果我应该将此迁移到程序员 SE,请告诉我。

谢谢。

最佳答案

回答

从技术角度来看,我认为您的提议是可以的。

意见

从风格的角度来看,在实际上不需要的情况下使用额外的大括号对我来说有点奇怪,因为我从未见过有人写过这样的代码。但是,它确实读起来不错,没有真正的技术开销,并且当您考虑下面的一些替代方案时,它不需要完全不同的方法,如 DSL 或额外的语法和类型构造,如创建额外的方法或类。

我见过的更标准的方式是通过工厂方法或继承。例如:

备选方案

build 者

如果构建器仍然存在,自然而然的事情就是使用它们——但是构建器现在已被弃用,因此它们不是一个可行的替代方案。当 JavaFX 团队放弃构建器时,有许多替代建议(您可以通过关注 builder dropping thread 上的所有帖子找到),但我不认为真正找到了真正的标准替代品,只是不同选项。

工厂方法

HBox top = new HBox(
    createLabel("White", "white-check"),
    createLabel("Light Gray", "lightgray-check")
);
. . . 
public Label createLabel(String text, String styleClass) {
    Label label = new Label(text);
    label.getStyleClass().add(styleClass);
    label.setMinWidth(160);
    label.setMinHeight(60);

    return label
}

继承

HBox top = new HBox(
    new CustomLabel("White", "white-check"),
    new CustomLabel("Light Gray", "lightgray-check")
);
. . . 
public class CustomLabel extends Label {
    public CustomLabel(String text, String styleClass) {
        super(text);
        getStyleClass().add(styleClass);
        setMinWidth(160);
        setMinHeight(60);
     }
}

备用域特定语言

例如ScalaFX代码:

var top = new HBox {
  content = Seq(
    new Label {
      text = "White"
      styleClass = Seq("white-check")
      minWidth = 160
      minHeight = 60
    },
    new Label {
      text = "Light Gray"
      styleClass = Seq("lightgray-check")
      minWidth = 160
      minHeight = 60
    }
  )
}

关于java - 在 JavaFX 中使用大括号进行父组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28821633/

相关文章:

java - FXMLLoader.load() 在 java 9 之前的风格中工作正常,但在模块中失败

javafx 2.2 键码输入

syntax - Prolog 中大括号的含义

java - Printable 打印整个框架而不是内容

java - 在编译时使用 Java 7 u21,在运行时使用 Java 7 u13

css - JavaFX - 无法从元素内加载图像

JavaFX拖动旋转节点

c - C 中的逗号、圆括号和大括号之间的关系是什么?

java - 当与 if 语句相同时给出 "Found one too many { characters without a } to match it"

java - 这些页面包括带参数的编写函数