2014-03-28 87 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]); 
        } 
      } 
}