gpt4 book ai didi

java - 如何设置JTree "ctrl"选择模式始终启用

转载 作者:搜寻专家 更新时间:2023-10-31 19:51:17 25 4
gpt4 key购买 nike

我有一个实现多选逻辑的 JTree。

当我使用鼠标 + 按下 Ctrl 键进行所有选择时,这非常有用。如果用户在未按下 Ctrl 键的情况下进行选择,则会破坏我的逻辑。

我真的不明白为什么它会中断,但我认为一个可能的解决方案是始终指示 TreeSelectionModel 已通过按下 Ctrl 键进行选择。

你有什么建议?

最佳答案

我想我已经找到了解决方案

您将需要扩展 JTree 和 DefaultTreeSelectionModel。

JTree相关方法:

/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/// Implement selection using "adding" only logic. //
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////

@Override
public void setSelectionPath(TreePath path) {

System.out.println("MLDebugJTree: setSelectionPath(" + path + ")");

addSelectionPath(path);

return;
//super.setSelectionPath(path);
}

@Override
public void setSelectionPaths(TreePath[] paths) {

System.out.println("MLDebugJTree: setSelectionPaths(" + paths + ")");

addSelectionPaths(paths);

return;
}

@Override
public void setSelectionRow(int row) {

System.out.println("MLDebugJTree: setSelectionRow(" + row + ")");

addSelectionRow(row);

return;
//super.setSelectionRow(row);
}

@Override
public void setSelectionRows(int[] rows) {

System.out.println("MLDebugJTree: setSelectionRows(" + rows + ")");

addSelectionRows(rows);

return;
//super.setSelectionRows(rows);
}

DefaultSelectionModel相关方法:

package com.ml.tree2.model.impl;

import javax.swing.tree.DefaultTreeSelectionModel;
import javax.swing.tree.TreePath;

public class MLTreeSelectionModel extends DefaultTreeSelectionModel {
private static final long serialVersionUID = -4270031800448415780L;

@Override
public void addSelectionPath(TreePath path) {
// Don't do overriding logic here because addSelectionPaths is ultimately called.
super.addSelectionPath(path);
}

@Override
public void addSelectionPaths(TreePath[] paths) {
if(paths != null) {
for(TreePath path : paths) {

TreePath[] toAdd = new TreePath[1];
toAdd[0] = path;

if (isPathSelected(path)) {
// If path has been previously selected REMOVE THE SELECTION.
super.removeSelectionPaths(toAdd);
} else {
// Else we really want to add the selection...
super.addSelectionPaths(toAdd);
}
}
}
}

HTH.

关于java - 如何设置JTree "ctrl"选择模式始终启用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/700549/

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