我想编写一个新类,扩展包含StackPane的Region。但是当我向它添加插入物(如填充或边框)时,我遇到了麻烦。以下是该类的简化示例:
public class CustomPane extends Region
{
private ToggleButton testControl = new ToggleButton("just a test control");
private StackPane rootPane = new StackPane(testControl);
public CustomPane()
{
getChildren().add(rootPane);
setStyle("-fx-border-color: #257165; -fx-border-width: 10;");
}
}
结果如下:
如果我尝试通过调用
来移动StackPanerootPane.setLayoutX(10);
rootPane.setLayoutY(10);
然后该地区才会增长:
但我真的希望它看起来像这样:
(第三个图像是通过扩展StackPane而不是Region来创建的,它已经正确地管理了布局内容。不幸的是我必须扩展Region,因为我想保持getChildren()
受保护。)
好的,我试图处理布局计算,但我没想出来。专家可以给我一些建议吗?
答案 0 :(得分:2)
StackPane
使用insets
来布局(托管)子级。默认情况下,Region
不会执行此操作。因此,您需要使用使用这些insets
的内容覆盖layoutChildren
,例如:
@Override
protected void layoutChildren() {
Insets insets = getInsets();
double top = insets.getTop(),
left = insets.getLeft(),
width = getWidth() - left - insets.getRight(),
height = getHeight() - top - insets.getBottom();
// layout all managed children (there's only rootPane in this case)
layoutInArea(rootPane,
left, top, // offset of layout area
width, height, // available size for content
0,
HPos.LEFT,
VPos.TOP);
}