2014-03-28 128 views
1

我有一个Jtree,我需要删除某些节点上的突出显示效果。JTree禁用某些节点上的突出显示效果

所以,现在我有这样的阿拉节点

enter image description here

,我想这有一定的节点上:

enter image description here

我怎样才能做到这一点? 谢谢

+0

你可能想使用[JTree的选择监听器] (http://docs.oracle.com/javase/tutorial/uiswing/events/treeselectionlistener.html) – SuperRetro

+3

@SuperRetro:你确定吗?这看起来更像是TreeCellRenderer的一项工作。 –

+1

更改文字样式的示例。希望你从那里得到一些想法。 http://stackoverflow.com/questions/10976594/changing-text-style-of-defaultmutabletreenode – anonymous

回答

0

- 第一:您需要设置一个对象(用自己的财产)的节点下面的方法:

Group aGroup = new Group(); //Obviously use your correct constructor 
DefaultMutableTreeNode node = new DefaultMutableTreeNode(yourObject); 

记住实施toString组中的方法

- 第二个:创建一个扩展DefaultTreeCellRenderer一个新的类并覆盖getTreeCellRendererComponent这样的:

public class MyRenderer extends DefaultTreeCellRenderer { 

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

      DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; 

      if(node.getUserObject().getYourProperty()){ 
       setTextNonSelectionColor(Color.BLACK); 
       setBackgroundSelectionColor(Color.BLUE); 
       setTextSelectionColor(Color.WHITE); 
       setBorderSelectionColor(Color.WHITE); 
      } 
      else{ 
       setTextNonSelectionColor(Color.LIGHT_GRAY); 
       setBackgroundSelectionColor(Color.RED); 
       setTextSelectionColor(Color.WHITE); 
       setBorderSelectionColor(Color.WHITE); 
      } 

      super.getTreeCellRendererComponent(
       tree, value, sel, exp, leaf, row, hasFocus); 
      return this; 
     } 
} 

- 第三:你的渲染器设置为树:

yourTree.setCellRenderer(new MyRenderer()); 
0

难道你不可能使用这样的东西?不确定的实用性,而不是测试它

tree.addMouseListener (new MouseAdapter(){ 

     public void mousePressed (MouseEvent e){ 

      // Check for right click 
      if (SwingUtilities.isRightMouseButton(e)){ 

        int selection[] = tree.getSelectionRows(); 

        for(int i=0; i< selection.size; i++){ 

        tree.removeSelectionInterval(selection[i], selection[i]); 
        } 
      } 
}