【发布时间】:2015-02-26 02:01:59
【问题描述】:
我现在正在学习基本的 JavaFX,我不明白我正在阅读的书中的这句话:“不,像文本字段这样的节点只能添加到一个窗格中一次。添加一个节点到一个窗格多次或到不同的窗格将导致运行时错误。”从本书提供的UML图中可以看出它是一个组合,但我不明白为什么(库类代码实现)。
例如,为什么这会导致编译错误?因为它是一个组合,所以不是在窗格中实例化一个新的文本字段吗?
FlowPane pane = new FlowPane();
StackPane pane2 = new StackPane();
TextField tf = new TextField();
pane.getChildren().add(tf);
pane.getChildren().add(tf);
另外,为什么以下运行但不显示放置在窗格中的文本字段?
FlowPane pane = new FlowPane();
StackPane pane2 = new StackPane();
TextField tf = new TextField();
pane.getChildren().add(tf);
pane2.getChildren().add(tf);
primaryStage.setScene(new Scene(pane));
primaryStage.show();
【问题讨论】:
-
这句话从何而来?一些上下文会很有用。
-
来自教科书
-
您可以查看 JavaFX 源代码并找出原因。
-
你真的不需要看源代码。您可以查看API documentation 并发现允许这样做是没有意义的。例如,如果允许此代码,则
tf.getBoundsInParent()等方法调用将没有有意义的语义。