我想更改树视图中展开/取消展开的公开节点,而不使用CSS的-fx背景图像。箭头,因为尽管图像是9*9像素,但显示效果很差。我想用setCellFactory,但我不知道怎么用。
我有几个问题:
>
在setCellFactory中,覆盖call或updateItem方法的目的是什么?在这种情况下要覆盖哪个?
updateItem中的item==null或boolean empty=true有什么不同?布尔值empty=true的句柄是什么情况?
我希望我的观点是这样的
由于TreeView只能包含一种类型的Item和Group A标签不是Person,除了将Group A作为Person对象的名称之外,我想我只能使用循环显示树并根据它们所属的Group将TreeItems放在Box下。但是,我不知道如何制作可扩展的Box(使用VBox?Hbox?StackPane?)请给我一个提示
package DummyGUI;
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.*;
import javafx.event.ActionEvent;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
public class App extends Application
{
private final Image male = new Image(getClass().getResourceAsStream("male.png"), 16, 16, true, true);
private final Node maleIcon = new ImageView(male);
private final Image female = new Image(getClass().getResourceAsStream("female.png"), 16, 16, true, true);
private final Node femaleIcon = new ImageView(female);
private final Image plus = new Image(getClass().getResourceAsStream("plus-button.png"), 16, 16, true, true);
private final Node plusIcon = new ImageView(plus);
private final Image minus = new Image(getClass().getResourceAsStream("minus-button.png"), 16, 16, true, true);
private final Node minusIcon = new ImageView(minus);
private TreeView<Person> tree;
public static void main(String[] args)
{
launch();
}
public void start(Stage topView)
{
createGUI(topView);
}
private void createGUI(Stage topView)
{
topView.setTitle("Dummy App");
initTree();
VBox vb = new VBox(tree);
topView.setScene(new Scene(vb));
topView.show();
}
private void initTree()
{
Person person1 = new Person("Charles", 'M', '0');
Person person2 = new Person("John", 'M', 'A');
Person person3 = new Person("Pearl", 'M', 'A');
TreeItem<Person> root = new TreeItem<>(person1);
TreeItem<Person> child1 = new TreeItem<>(person2);
TreeItem<Person> child2 = new TreeItem<>(person3);
tree = new TreeView<>(root);
root.setExpanded(true);
root.getChildren().addAll(child1, child2);
tree.setCellFactory(tv ->
{
HBox hb = new HBox();
TreeCell<Person> cell = new TreeCell<Person>()
{
@Override
public void updateItem(Person item, boolean empty)
{
super.updateItem(item, empty);
if(empty)
{
setGraphic(null);
setText(null);
}
else
{
Node icon = (item.getGender() == 'M' ? maleIcon : femaleIcon);
setGraphic(icon);
setText(item.toString());
}
}
};
cell.setDisclosureNode(plusIcon);
return cell;
});
}
}
package DummyGUI;
public class Person
{
String name;
char gender;
char group;
public Person(String name, char gender, char group)
{
this.name = name;
this.gender = gender;
this.group = group;
}
public String getName()
{
return name;
}
public char getGender()
{
return gender;
}
public char getGroup()
{
return group;
}
public String toString()
{
return name;
}
}
我试图将箭头图标更改为加号图标,但它有错误,因为我不知道如何覆盖updateItem。
我不知道为什么约翰和查尔斯的性别图标在树展开时不显示,我也不知道如何添加减号图标。非常感谢。
if (getTreeItem() != null)
{
setDisclosureNode(getTreeItem().isExpanded() ? expanded : collapsed);
setOnMouseClicked(event -> {
setDisclosureNode(getTreeItem().isExpanded() ? expanded : collapsed);
});
}
没关系,我想点击SetonMouse会很好,谢谢!
最简单的答案:
基本问题是在所有单元中重复使用相同的节点实例——节点必须只有一个父节点。使用相同的方法,会悄悄地将其从以前的父级中删除(或引发异常)
适应细胞
tree.setCellFactory(tv -> {
// per-cell icons
Node maleIcon = new Button("m");
Node femaleIcon = new Button("f");
Node expanded = new Label("-");
Node collapsed = new Label("+");
TreeCell<Person> cell = new TreeCell<Person>() {
@Override
public void updateItem(Person item, boolean empty) {
super.updateItem(item, empty);
// check if the cell is empty (no data) or if the data is null
if (item == null || empty) {
setGraphic(null);
setText(null);
} else {
Node icon = (item.getGender() == 'M' ? maleIcon
: femaleIcon);
setGraphic(icon);
// never-ever override toString for application reasons
// instead set the text from data properties
setText(item.getName());
}
if (getTreeItem() != null) {
// update disclosureNode depending on expanded state
setDisclosureNode(getTreeItem().isExpanded() ? expanded : collapsed);
}
}
};
return cell;
});
我的项目涉及一个带有自定义表格模型的JTable。因为我希望用户能够修改表中的每个单元格,所以我选择让我的自定义TableModel(CSVModel)扩展DefaultTableModel。然而,由于某些原因,当我试图编辑表中的单元格时,CSVModel会抛出一个异常。我得到的唯一提示来自堆栈跟踪的最后一行: java线程“AWT-EventQueue-0”中出现异常。lang.ArrayInd
细胞自动机(CA)是一个世界的模型,带有非常简单的物理。 “细胞”的意思是世界被分成一个大口袋,称为细胞。 “自动机”是一台执行计算的机器 - 它可能是一台真机。 ,但更多时候,“机器”是数学抽象或计算机的模拟。 本章介绍了史蒂文沃尔夫勒姆(Steven Wolfram)在 20 世纪 80 年代进行的实验,表明一些细胞自动机展示出令人惊讶的复杂行为,包括执行任意计算的能力。 我讨论了这些结果的含
我正试图在我的公司里用代理建立这个maven项目https://github.com/gsummer/cyNeo4j Pom中列出的依赖项在Maven Central repo中不存在。。它们位于: 我收到这个错误 [错误]无法在cyneo4j项目上执行目标:无法解决项目nl.maastrichtuniversity.networklibrary的依赖项:cyneo4j:bundle:1.3dev
Urban Müller 1993年的Brainfuck据说有一个“至少”30000个细胞的磁带寄存器。然而,考虑到语言主要是在base 2中交易,我想知道他的“磁带”(历史上)是否有单元格。 它说了穆勒使用的细胞的确切数量吗?
今天早上,我下载了Cytoscape,我再也无法成功打开该应用程序。 在此之前,我使用的是(我相信?)也没有遇到任何问题。我在一台装有Windows10的笔记本电脑上工作。 任何帮助或洞察力将非常感谢!
我已经创建了一个cytoscape.js图。允许用户在任何节点上单击和缩放/向下钻取,以查看所有邻近的节点和边缘。我需要添加一个重置按钮,这将恢复图形到它的原始位置,即当页面第一次加载。我尝试使用了几个不同的函数,如cy.load、forcerender、cy.destroy和recreate graph。唯一剩下的就是从dom中清除整个对象并添加另一个cytoscape图形对象。我想知道是否有一