作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
双击时,我将双击的 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/
我有一根绳子 5,(5,5),C'A,B','A,B',',B','A,',"A,B",C"A,B" 我想用逗号分割它,但需要排除括号和引号内的逗号(单引号和双引号)。 像这样 5 (5,5) C'A
我是一名优秀的程序员,十分优秀!