gpt4 book ai didi

java - 如何按当前顺序从 OutlineView 获取节点?

转载 作者:行者123 更新时间:2023-12-01 04:15:23 26 4
gpt4 key购买 nike

我正在开发一个基于netbeans平台的应用程序。

在一个 TopComponent 中,我对 OutlineView 进行子类化以显示节点集合。此 OutlineView 有一些列,用户可以使用这些列对不同属性的节点集合进行排序。

我的问题是,在我对节点进行排序后(通过 GUI,单击列),我希望获得当前有序状态的节点集合。我还没有找到办法做到这一点?

这就是我的 OutlineView 的外观...(排序之前)

------------------------
|Nodes | Prop1 | Prop2 |
|-----------------------
|Node1 | 1 | a |
|-----------------------
|Node2 | 5 | y |
|----------------------
|Node3 | 2 | h |
|-----------------------
|Node4 | 3 | x |
|-----------------------

然后,在我单击“Prop1”后,它将重新排列。

如果我从 ExplorerManager 获取节点,它们将按原始顺序排列,而不是按排序顺序排列。

如果我从模型中获取节点;

  for (int i = 0; i < getOutline().getModel().getRowCount(); i++) {
TreeNode treeNode = (TreeNode) getOutline().getModel().getValueAt(i, 0);
// still in the original order
}

它们仍将按原来的顺序...

那么有人知道我应该如何让它们按照新的排序顺序排列吗?

最佳答案

好吧,我找到了一个足以满足我的需求的解决方案,虽然不是很漂亮,但我想我会分享它。我添加了一个列模型监听器,当用户单击该列时将调用该监听器,然后“稍后”获取排序的节点。

我仍然对监听排序的方式感兴趣,因为这个列模型监听器感觉不太漂亮......

    getOutline().getColumnModel().addColumnModelListener(new TableColumnModelListener() {

@Override
public void columnAdded(TableColumnModelEvent tcme) { }

@Override
public void columnRemoved(TableColumnModelEvent tcme) { }

@Override
public void columnMoved(TableColumnModelEvent tcme) {


/* Must be done with invoke later, since
* this will be called when the user clicks on the column, not
* when the actual sorting takes place...
*/
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
getSortedNodes();
}
});
}

@Override
public void columnMarginChanged(ChangeEvent ce) { }

@Override
public void columnSelectionChanged(ListSelectionEvent lse) { }
});


private List<Node> getSortedNodes() {
List<Node> sortedNodes = new ArrayList<>();
for (int i = 0; i < getOutline().getRowCount(); i++) {
int sortedIndex = getOutline().convertRowIndexToModel(i);
ETable.RowMapping mapping = new ETable.RowMapping(sortedIndex, getOutline().getModel(), getOutline());
Node node = (Node) mapping.getTransformedValue(0);
sortedNodes.add(node);
}
return sortedNodes;
}

关于java - 如何按当前顺序从 OutlineView 获取节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19497484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com