我正在用 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/