gpt4 book ai didi

java - Jtree:将背景颜色设置为最大单双击节点

转载 作者:行者123 更新时间:2023-12-02 08:06:18 28 4
gpt4 key购买 nike

双击时,我将双击的 Jtree 节点的背景突出显示为绿色。当我双击其他节点时,之前选择的绿色节点应该恢复到原来的状态,并且新双击的节点应该亮起绿色。

它在某种程度上起作用,但行为不一致。当我双击子节点时,它们将变成绿色,并且先前双击的节点保持绿色,直到我选择该节点并选择另一个节点......

这是我的自定义渲染器。

 public class MyRenderer extends DefaultTreeCellRenderer{


public MyRenderer() {
}

public Component getTreeCellRendererComponent(
JTree tree,
Object value,
boolean sel,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {

super.getTreeCellRendererComponent(
tree, value, sel,
expanded, leaf, row,
hasFocus);

DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
NodePro np = (NodePro)(node.getUserObject());

if(np.getNodeancestors() != null){
if(np.getNodeancestors().contains("activated")){
setBackgroundNonSelectionColor(Color.GREEN);

}else{
setBackgroundNonSelectionColor(null);

}
}else{
setBackgroundNonSelectionColor(null);

}

return this;
}


}

这是我的 Jtree,它添加了双击监听器。

  public class Tree extends JTree{
private static Tree INSTANCE;
private TreeSelectionListenerClass tsl;
private TreePopupTriggerListener ptl;
private TreeDoubleClickListener dbll;

public Tree() {
// TODO Auto-generated constructor stub

tsl = new TreeSelectionListenerClass();
dbll = new TreeDoubleClickListener();

addTreeSelectionListener(tsl);
addMouseListener(dbll);
setToggleClickCount(0);
setCellRenderer(new MyRenderer());

}

这是我双击的地方......

public class TreeDoubleClickListener implements MouseInputListener {

public TreeDoubleClickListener(){

}

/*On Double Click (This Node Will Be Activated), Save To Activated Node */
@Override
public void mouseClicked(MouseEvent e) {

if (e.getClickCount() == 2){
Global.showWaitCursor();

try{
DefaultMutableTreeNode selected = (DefaultMutableTreeNode) Global.previousTreePath.getLastPathComponent();
NodePro npx = (NodePro) selected.getUserObject();
npx.setNodeancestors("");

TreePath path = Tree.getInstance().getPathForLocation(e.getX(), e.getY());
if (path != null){
Global.previousTreePath = path;
DefaultMutableTreeNode current = (DefaultMutableTreeNode) Global.previousTreePath.getLastPathComponent();
NodePro npt = (NodePro) current.getUserObject();
npt.setNodeancestors("activated");
}

}catch(Exception zxcv){
//save this path to edit later
TreePath path = Tree.getInstance().getPathForLocation(e.getX(), e.getY());
if (path != null){
Global.previousTreePath = path;
DefaultMutableTreeNode current = (DefaultMutableTreeNode) Global.previousTreePath.getLastPathComponent();
NodePro npt = (NodePro) current.getUserObject();
npt.setNodeancestors("activated");
}
}


}

}

最佳答案

除了更改节点的状态之外,您还必须将更改通知模型。假设模型的类型为 DefaultTreeModel(使用自定义模型,您需要向适当的方法发送消息)

 // change node/user object
DefaultMutableTreeNode current = (DefaultMutableTreeNode)
Global.previousTreePath.getLastPathComponent();
NodePro npt = (NodePro) current.getUserObject();
npt.setNodeancestors("activated");
// notify model
JTree tree = (JTree) e.getSource();
((DefaultTreeModel) tree.getModel()).nodeChanged(current);

关于java - Jtree:将背景颜色设置为最大单双击节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116853/

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