我正在使用santhosh tekuri的工作作为基础,自定义JTree,以便某些节点具有复选框。
因此,我们的想法是编写一个自定义TreeCellRenderer,在本例中它扩展了JPanel并实现了TreeCellRenderer,然后在getTreeCellRendererComponent方法中,我必须为每个节点确定是否接收到复选框。
我已经看到了一些典型JTree自定义每个节点图标的其他示例,但它们依赖于将每个节点转换为JLabel并获取其文本,而这里是JPanel。
这就是我的渲染器的样子:
public class CheckTreeCellRenderer extends JPanel implements TreeCellRenderer{
private CheckTreeSelectionModel selectionModel;
private TreeCellRenderer delegate;
private TristateCheckBox checkBox;
protected CheckTreeManager.CheckBoxCustomizer checkBoxCustomer;
public CheckTreeCellRenderer(TreeCellRenderer delegate, CheckTreeSelectionModel selectionModel){
this.delegate = delegate;
this.selectionModel = selectionModel;
this.checkBox = new TristateCheckBox("");
this.checkBox.setOpaque(false);
setLayout(new BorderLayout());
setOpaque(false);
}
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus){
Component renderer = delegate.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
// Inside this if clause, those cells which do not require checkbox will be returned
if({CODE_TO_GET_NODE_TEXT}.startsWith("A")){
return renderer;
}
TreePath path = tree.getPathForRow(row);
if(path != null){
if(checkBoxCustomer != null && !checkBoxCustomer.showCheckBox(path)){
return renderer;
}
if(selectionModel.isPathSelected(path, selectionModel.isDigged())){
checkBox.getTristateModel().setState(TristateState.SELECTED);
}
else{
checkBox.getTristateModel().setState(selectionModel.isDigged() && selectionModel.isPartiallySelected(path) ? TristateState.INDETERMINATE : TristateState.DESELECTED);
}
}
removeAll();
add(checkBox, BorderLayout.WEST);
add(renderer, BorderLayout.CENTER);
return this;
}
}
在这种情况下,我想避免为那些文本以“A”开头的单元格设置三态复选框。但是我找不到从value参数获取文本的方法。
如果有帮助,我将这样创建JTree:
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
JTree tree = new JTree(root);
// Add nodes to the tree
DefaultMutableTreeNode friends_node = new DefaultMutableTreeNode("Friends");
friends_node.add(new DefaultMutableTreeNode("Anna"));
friends_node.add(new DefaultMutableTreeNode("Amador"));
friends_node.add(new DefaultMutableTreeNode("Jonas"));
friends_node.add(new DefaultMutableTreeNode("Mike"));
friends_node.add(new DefaultMutableTreeNode("Anthony"));
friends_node.add(new DefaultMutableTreeNode("Maya"));
friends_node.add(new DefaultMutableTreeNode("Pepe Vinyuela"));
root.add(friends_node);
tree.setCellRenderer(renderer = new CheckTreeCellRenderer(tree.getCellRenderer(), new CheckTreeSelectionModel(tree.getModel(), dig)));
有什么想法吗?
如果您使用的是字符串userObject=“Anna” <代码>新建DefaultMutableTreeNode(userObject) ,则可以使用DefaultMutableTreeNode#getUserObject()方法:
@Override public Component getTreeCellRendererComponent(
JTree tree, Object value, boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
Component renderer = delegate.getTreeCellRendererComponent(
tree, value, selected, expanded, leaf, row, hasFocus);
if (value instanceof DefaultMutableTreeNode) {
Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
// Inside this if clause, those cells which do not require checkbox will be returned
if(userObject instanceof String && ((String) userObject).startsWith("A")){
return renderer;
}
//...
节点类 成员变量 变量 类型 名称 备注 id number 标识 无 name string 名称 无 position Object 位置 结构为 {x:0,y:0,z:0} scale Object 缩放比例 结构为 {x:0,y:0} 分别标识x方向和y方向上的缩放系数 rotation Object 旋转 结构为 {x:0,y:0,z:0} 绕x,y,z轴逆时针旋转 vertexColo
本文向大家介绍vue 自定义指令自动获取文本框焦点的方法,包括了vue 自定义指令自动获取文本框焦点的方法的使用技巧和注意事项,需要的朋友参考一下 HTML: js: 官方例子: 我的: 在我的项目中使用官方的例子时,input不能自动获取焦点,使用我的js时可自动获取焦点,查询相关资料后知道,insert是一个钩子函数,只要父节点存在,在插入父节点时调用,我这里并没有插入所以没有调用,所以还是要
我对React Router中路由的渲染顺序有问题。据我所知,任何子路由都将在其父路由之后进行渲染,因此将在DOM中的父路由之上进行渲染。 <代码> 我有这个路由器设置,但是在我从IndexRoute导航到/browse路由之后,浏览路由呈现在我的导航组件的顶部,我不能单击导航组件上的任何内容。 我的问题是如何强制Nav组件始终最后渲染,或者是否有更好的方法来构建我的应用程序以避免这种情况。 谢谢
问题内容: 我有一段这样的HTML: 我有一个与此HTML匹配的WebElement。如何从中仅提取“标题”?方法.getText()返回“ Title \ nAuthor”。 问题答案: 您无法在WebDriver API中执行此操作,而必须在代码中执行。例如: 请注意,结尾的换行符实际上是元素文本的一部分,因此,如果您不想要它,则需要将其删除。
我正在组装我的第一个基于react的应用程序。我有一个工作应用程序,并已在反应路由器编织。我和巴贝尔在一起。 我在chrome的开发者控制台上得到了以下信息- 我在components/Login.js上有以下组件 在我的app.js我有以下几点- 我认为我的错误在于我导出/导入我的组件的方式,因为错误存在于另一个组件中,并且当我更改上面第一个导入的组件时,错误落在该组件上。 我尝试了各种方法,如
我希望在选择树中的某个节点时,动态地向该节点添加一些自定义渲染(可能是一个边框,也可能是一些颜色更改)。 我试过这个: 但它似乎不起作用。 我还希望渲染器是可添加的(或链接的)。我已经在节点上进行了类似图标的渲染,因此新的渲染器应该与其他渲染器互补。不确定extjs是否可以做到这一点?