2016-06-13 87 views
2

我想知道是否有任何方法使用JTrees包裝。我在節點的文本中使用HTML,我不確定這是否重要。用JTree包裝Word

screenshot

+0

你能張貼到你嘗試過什麼碼? – Beniton

+0

我不知道我現在可以嘗試什麼。我曾想過用JLabel替換單元格渲染器,但由於默認的單元渲染器已經是一個,所以它會執行任何操作。 – utybo

+1

這比我想象的更詭計+1,我還想看到一個很好的解決方案。將(包裝!)行的高度設置爲正確並且仍然爲每個渲染器組件分配適當的寬度是非常煩瑣的。 – Marco13

回答

2

好吧,你可以嘗試像下面。

 JTree tree = new JTree(); 
     DefaultMutableTreeNode root = new DefaultMutableTreeNode("Animals"); 
     DefaultTreeModel model = new DefaultTreeModel(root); 
     tree.setModel(model); 
     root.add(new DefaultMutableTreeNode(new Animal("Dog","ACS"))); 
     root.add(new DefaultMutableTreeNode(new Animal("Cat","BCS"))); 
     root.add(new DefaultMutableTreeNode(new Animal("Lion","FCS"))); 
     root.add(new DefaultMutableTreeNode(new Animal("Tiger","<html>Hello World!<br>blahblahblah</html>"))); 

     DefaultTreeSelectionModel sModel = new DefaultTreeSelectionModel(); 
     sModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 
     tree.setSelectionModel(sModel); 
     tree.addTreeSelectionListener(new TreeSelectionListener() { 

      @Override 
      public void valueChanged(TreeSelectionEvent selection) { 
       DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)selection.getPath().getLastPathComponent(); 
       if(selectedNode.isLeaf()){ 
        Animal animal = (Animal)selectedNode.getUserObject(); 
       } 
      } 
     }); 
     tree.setCellRenderer(new DefaultTreeCellRenderer(){ 

      @Override 
      public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, 
        boolean leaf, int row, boolean hasFocus) { 
       if(value != null){ 
        DefaultMutableTreeNode node = (DefaultMutableTreeNode)value; 
        if(node.isLeaf()){ 
         Animal animal = (Animal)((DefaultMutableTreeNode)value).getUserObject(); 

         this.setText(animal.name); 
        }else { 
         return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); 
        } 
       } 
       return this; 
      } 

     }); 

這給了我下面的輸出。

enter image description here

希望它可以幫助你。

對於自動換行,你可以使用HTML內容

請參考Andrew的答案在這link

+0

謝謝,但這不是我正在考慮的問題,我正在考慮這個問題:http://imgur.com/UhC8AKg看到文本被截斷 – utybo

+0

@utybo您是否看到_Hello World! blahblahblah_它是一個html。你可以使用html來包裝你的內容。 – Beniton

+0

我確實看到了這一點,但你明確地做出了換行符,這不是我想要做的。我想有一種方法來使用JTextArea的setLineWrap(boolean)來打包word文檔,例如 – utybo