在这个问题中,我问如何使JXTreeTable(SwingX)排序成为它的首要元素.
我接过一看库(aephyr)所建议mKorbel,并试图将其与JXTreeTable结合(我创建了一个名为JXSortableTreeTable类新复制JXTreeTable的源代码).
到目前为止,我能够实现一种机制来对树表的节点进行排序,即当convertRowIndexToModel
调用我的自定义排序器(见下文)时,它返回的索引是正确的.
因此,我有一个看起来像这样的类:
public class TreeTableRowSorter <M extends TreeTableModelAdapter> extends DefaultRowSorter {
private M treeTableModel; // model
private List<Integer> indices; // list where each entry is the model index
private IdentityHashMap<Object, NodeSorter> sorters;
private class IndicesMapFiller { // class that fills the "map" this.indices
public void fillIndicesMap(Object node) { // recursive
// Fills the indices "map"
}
}
@Override
public int convertRowIndexToModel(int index) {
return indices.get(index);
}
@Override
public int convertRowIndexToView(int …
Run Code Online (Sandbox Code Playgroud) 我有一张树桌和两个按钮:
但他们不起作用.在我做的支持bean root.setExpanded(true);
,root.setExpanded(false);
但它不起作用.
<center>
<p:treeTable value="#{roleMB.root}" var="roleTreeTableVar"
binding="#{roleMB.treeTable}" id="roleTreeTable">
<f:facet name="header">
<center>
<p:commandButton value="Réduire tout"
icon="ui-icon-folder-collapsed" style="font-size: 0.9em"
actionListener="#{roleMB.expandAll}"
update=":roleTreeTableForm:roleTreeTable" />
<p:spacer width="30px" />
<p:commandButton value="Développer tout"
icon="ui-icon-folder-open" style="font-size: 0.9em"
actionListener="#{roleMB.collapseAll}"
update=":roleTreeTableForm:roleTreeTable" />
<p:spacer width="30px" />
</center>
</f:facet>
<p:column style="width:150px">
<f:facet name="header">
Nom de Role
</f:facet>
<h:outputText value="#{roleTreeTableVar.nom}" />
</p:column>
<p:column style="width:100px">
<f:facet name="header">
Id de role
</f:facet>
<h:outputText value="#{roleTreeTableVar.id}" />
</p:column>
<p:column style="width:20px">
<p:commandLink oncomplete="dlgAddRole.show()" value="Ajouter"
update=":addRoleForm:selectRolesNamesId">
<f:setPropertyActionListener value="#{roleTreeTableVar}"
target="#{roleMB.selectedRole}" />
</p:commandLink>
<p:commandLink oncomplete="delRole.show()" …
Run Code Online (Sandbox Code Playgroud) 我有ap:treeTable,树内容都在一列中.树是一个共享组件,因此我的一些页面需要列标题,而有些则不需要.在columnHeader为空的页面中,它会为列标题创建一个空行,这是我不想要的.我确实想要列内容,而不是没有列标题时的标题.
我怎样才能解决这个问题?任何指针/想法都会很棒.谢谢!
我正在Vaadin 7中完成我的项目.我需要为Treetable实现一个Lazy Query Container.我将从Web服务获取Treetable的数据.
有人可以说明如何使用带有Web服务的Lazy Query Container作为我的数据源吗?
请让我知道实现此操作所需的步骤或显示示例代码以帮助我入门.
我想从JSON创建一个树结构,但有多个列可以排序.我见过很多树木和网格的实现,但从来没有混合过.
有没有人知道任何Javascript工具包的插件或功能可以实现这一点所以我不必在这里重新发明轮子?
我有一个p:treeTable
表单和p:dialog
另一种形式,从p:dialog
我添加数据到p:treeTable
在提交h:commandButton
对话框时,我添加p:treeTable
了orded的更新以查看添加的节点
问题是用户打开的所有扩展节点都将崩溃
我发现这个问题在更新之后避免了p:treeTable的崩溃,在他写的问题解决但他的问题没有答案或解决方案
我必须做一个树结构来显示来自Java的数据.我正在使用jQuery的treetable插件,我无法获得我想要的输出.这是我的代码.
Freemarker:
<table id="dt_basic" class="table table table-bordered table-hover" width="100%">
<thead>
<tr>
<#list rows.getCols() as col>
<th>${col.getColumnName()}</th>
</#list>
</tr>
</thead>
<tbody>
<#list rows.getRows() as row>
<#if !parent??>
<#assign parent = row />
<tr data-tt-id="${parent[rows.getCols()[0].getColumnName()]}" data-tt-branch="true">
<td>${parent[rows.getCols()[0].getColumnName()]}</td>
<td colspan="${rows.getCols()?size-1}"></td>
</tr>
<#elseif row[rows.getCols()[0].getColumnName()] != parent[rows.getCols()[0].getColumnName()]>
<#assign parent = row />
<tr data-tt-id="${parent[rows.getCols()[0].getColumnName()]}">
<td>${row[col.getColumnName()]}</td>
<td colspan="${rows.getCols()?size-1}"></td>
</tr>
</#if>
<tr data-tt-id="1.1" data-tt-parent-id="${row[rows.getCols()[0].getColumnName()]}">
<#list rows.getCols() as col>
<#if col?is_first>
<td>${row[col.getColumnName()]}</td>
<#else>
<#if col.isRightAligned()>
<td name="${col.getColumnName()}" align='RIGHT'>${row[col.getColumnName()]}</td>
<#else>
<td name="${col.getColumnName()}">${row[col.getColumnName()]}</td>
</#if>
</#if>
</#list>
</tr>
</#list>
</tbody> …
Run Code Online (Sandbox Code Playgroud) 我一直在寻找这个.我需要一个JTreeTable
支持变量行高的.具体来说,我希望显示顶级节点的行高于它们下面的子行.
我一直在使用JXTreeTable
基于原始Sun文章的SwingX实现().但是,它特别禁止变量行高,并且没有重写JXTree
我无法看到通过.
在我开始讨厌的事情之前,会感激地收到任何提示/指示......
问题是:
当我在运行时添加行时,我试图使 TreeTable 中的节点保持展开状态。TreeTable 的默认行为是,当它发生某些情况时,它会再次呈现并且所有节点都会折叠。
API 只提供了保持第一级扩展的方法,但我也喜欢保持较低级别的节点扩展。我怎样才能做到这一点?
添加行之前:
添加一行后:
期待:
[编辑]
我已经尝试通过使用 Expand(iRowIndex) 来获得正确的行为,但就我而言,TreeTable 的生命周期(添加内容、重新渲染)没有帮助。
我在做什么:
我正在尝试使用拖放功能添加数据。当我们尝试将内容添加到 TreeTable 的特定位置时,我们必须获得父元素和子元素的正确位置。不幸的是,在添加上述内容后,第二个+级别被隐藏,这会扰乱我的拖放操作,因为表格行在折叠时具有不同的 ID。
基本上我需要一个像 ."setExpandFirstLevel(true)" 这样的 TreeTable 函数来处理所有其他级别。
我有一个PrimeFaces树表,想添加一个复选框,允许用户选择/取消选择所有复选框。
这是我的xhtml的摘录
<p:selectBooleanCheckbox
itemLabel="Select all"
value="#{mainViewBean.selectAll}">
<p:ajax listener="#{mainViewBean.onSelectAll}"
update="@this :mainForm" />
</p:selectBooleanCheckbox>
<p:treeTable id="treeToAssign"
value="#{mainViewBean.treeValue}" var="vh"
selectionMode="checkbox"
selection="#{mainViewBean.treeSelection}">
<f:facet name="header">
Tree Table
</f:facet>
<p:column>
<h:outputText value="#{vh.name}" />
</p:column>
</p:treeTable>
Run Code Online (Sandbox Code Playgroud)
这是我的bean方法
private TreeNode treeValue;
private TreeNode[] treeSelection;
private boolean selectAll;
public void onSelectAll() {
List<TreeNode> selection = new ArrayList<>();
for (TreeNode node : treeValue.getChildren()) {
node.setSelected(selectAll);
selection.add(node);
}
treeSelection = selection.toArray(new TreeNode[selection.size()]);
}
Run Code Online (Sandbox Code Playgroud)
我起初只是尝试设置NODE.setSelected(selectAll);
,但没有用,所以我也尝试手动填充treeSelection
。
我觉得这应该很简单,但是一直无法弄清楚,有什么建议吗?
谢谢
treetable ×10
primefaces ×4
java ×2
javascript ×2
jsf ×2
json ×2
swing ×2
swingx ×2
columnheader ×1
containers ×1
expand ×1
extjs ×1
freemarker ×1
hide ×1
html ×1
jsf-2.2 ×1
jtreetable ×1
jxtreetable ×1
lazy-loading ×1
sapui5 ×1
vaadin ×1