我想创建完全自定义的JavaFX控件。我不想“喜欢作曲”,因为我没有东西可以写作。
例如,假设我需要一个窗格,里面有坐标网格。窗格应该像普通窗格一样工作,即应该可以在那里添加控件或几何图形,但是在窗格的背景中应该绘制网格。另外,应在窗格的边缘绘制数值。
所有这些都应该动态反映窗格的转换和视口。
另一个例子:假设我想将平铺图像作为beckground。有数百万的瓷砖,比如谷歌地图,所以我无法将它们作为子节点加载,因为它们会耗尽内存。当用户滚动窗格时,我需要动态加载和卸载它们。
同样,窗格应该像普通窗格一样运行,即可以将子窗口添加到窗格中。
如何做到这一点?我发现,与paintConponent
类似的低级方法要么不存在,要么弃用。那么,该怎么办?
更新
我想设计一个具有自定义背景的容器。
例如,像这样:
(它应该是无穷无尽的,即一旦控件调整大小就显示更多行)
默认情况下,容器应该没有子节点,但仍然具有背景。背景不应该是容器的子代。我,程序员,应该能够将子容器添加到此容器中,并且只有在此之后,子容器才会出现在容器中。它们应该出现在背景之上。
像这样:
请注意,我们这里只有2个孩子。
更新
在下面的代码ScrollBar
中显示标准控件。如您所见,它包含可以移动的旋钮和可以按下的箭头按钮。
同时,此控件中的子项数报告为零。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ScrollBar;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class ChildrenOfDefaultControls extends Application {
@Override
public void start(Stage primaryStage) throws Exception
{
ScrollBar scrollBar = new ScrollBar();
AnchorPane root = new AnchorPane(scrollBar);
AnchorPane.setLeftAnchor(scrollBar, 0.);
AnchorPane.setRightAnchor(scrollBar, 0.);
AnchorPane.setTopAnchor(scrollBar, 100.);
Scene scene = new Scene(root, 800, 600);
primaryStage.setTitle(String.valueOf(scrollBar.getChildrenUnmodifiable().size()));
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(ChildrenOfDefaultControls.class, args);
}
}
好吧,我同意如果每个人都说不可能像在Swing中那样画画,那就让我们来做作曲。但是如何从用户那里隐藏这个组合,因为它是ScrollBar
控制的?