我有一个由几个标签控件组成的自定义控件:日期、标题、文本等,控件有fxml文件和一个控制器。我想将此控件用作ListView的单元格。我创建了一个自定义列表单元格
public class NoteTextCell extends ListCell<Note>{
//....
protected void updateItem(Note note, boolean isEmpty){
if(isEmpty|| note == null){
//....
}
else {
FXMLLoader loader = new FXMLLoader(getClass().getResource("fxml/note.fxml"));
Node node = loader.load();
setGraphic(node);
}
}
}
但我不确定这是一个正确的做法。我的应用程序中的ListView可能有数千个项目。根据我的理解,在创建图形节点之前,每次单元格更新都必须加载fxml、进行解析和其他操作。有没有更好的办法来解决这个问题?
为每个单元加载一次FXML,并在updateItem(...)
方法中根据需要配置它:
public class NoteTextCell extends ListCell<Note>{
private final Node graphic ;
private final NoteController controller ;
public NoteTextCell() throws IOException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("fxml/note.fxml"));
graphic = loader.load();
controller = loader.getController();
}
@Override
protected void updateItem(Note note, boolean isEmpty){
if(isEmpty|| note == null){
setGraphic(null);
}
else {
// configure based on note:
controller.setText(...);
controller.setXXX(...);
setGraphic(graphic);
}
}
}
这里假设FXML文件声明了一个控制器类NoteController
,并且您在其中定义了为特定Note
配置UI所需的方法。
这样,对于创建的每个单元格只加载一次FXML(无论列表中有多少项,可能不会超过20个左右),并且当用户滚动或重用单元格时,根据需要调用更新它的(相对有效的)方法。
我试图使用JavaFX8创建一组自定义控件。我有点困惑什么是正确的方法来做一些事情,比如布局我定义的孩子来构建我的控件。我用来重写layoutChildren()方法,在其中重新定位和调整子元素的大小;但是阅读javadoc中的layoutChildren()是这样写的: 在布局传递期间调用,以布局此父级中的子级。默认情况下,它只将托管的、可调整大小的内容的大小设置为它们的首选大小,而不进行任何节
我想在列表视图中创建一个自定义单元格。原谅我英语不好!我想在列表视图中显示图片、名称和状态。为此,我使用了另一个包含Hbox的Fxml。
本文向大家介绍浅谈ASP.NET中最简单的自定义控件,包括了浅谈ASP.NET中最简单的自定义控件的使用技巧和注意事项,需要的朋友参考一下 ASP.NET用户控件一般适用于产生相对静态的内容,所以没有builtin的事件支持。本文讨论用户控件返回事件的方法。 假定用户控件(UserControl.ascx)中包含按钮控件AButton,希望实现按AButton按钮时,包含该用户控件的页面可以接收
我正在尝试用一个自定义的控件替换默认的传单层控件。 我关注了另一个关于创建自定义层控件的帖子。 我可以通过层名,我已经用console.log检查了这一点。 但是,取消选中该复选框并不会删除该层。
我一直在研究一个传单地图,其中有许多静态层,可以使用传单的标准层控件关闭和打开。 最近,我一直在尝试使用onclick方法运行函数,当用户单击图例中的一个图像时,从地图中添加和删除层。我尝试了许多不同的方法来实现这一点,我认为这与javascript和web页面元素的加载顺序有关(但我对此相当陌生,所以我可能错了)。 无论如何,在不粘贴太多代码的情况下,我在文档的头部加载了所有脚本:
我想创建一个自定义控件,在其中我可以设置另一个自定义控件的列表,并且我想能够像在JavaFXTableView中一样使用FXML(请参见列列表): 我只想写这样的东西: 我已经知道如何实现简单的自定义控件,但我还没有找到任何关于以这种方式组合自定义控件的方法。你能给我指个方向吗?