2013-04-04 41 views
0

由於一些奇怪的原因,當我在java中實現JTree時,我在Mac OSX上看不到擴展線(角度)但是當樹擴展爲顯示所有節點時,我在Windows上看到它們。我試過tree.putClientProperty("JTree.lineStyle", "Angled"),但我什麼也沒得到。JTree實現

第二個問題,再次在OSX上:我有一個根的圖片,也沒有完全顯示從頂部和底部切割的東西。

DefaultMutableTreeNode root = new DefaultMutableTreeNode(userId + " Album List"); 
albTree = new JTree(root); 
albTree.setCellRenderer(new IconRenderer()); 
albTree.putClientProperty("JTree.lineStyle", "Angled");  
albTree.setFont(new Font("Segoe UI", Font.PLAIN, 20)); 
albTreeModel = (DefaultTreeModel) albTree.getModel();  albTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 


class IconRenderer extends DefaultTreeCellRenderer { 

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

     // start with default behavior 
     super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); 

     // customize based on local conditions/state 
     DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; 

     DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer(); 

     Icon openIcon = renderer.getDefaultOpenIcon(); 
     Icon rootIcon = new ImageIcon("images/user-1.png"); 

     if (node == nonAdminFrame.root) { 

      setIcon(rootIcon); 

     } 

     else if (nonAdminFrame.root.isNodeChild(node)) { 

      setIcon(openIcon); 
     } 

     return this; 
    } 
} 
+1

斜角是跨平臺的LookAndFeel(MetalLookAndFeel) – mKorbel 2013-04-04 17:04:32

+0

你有什麼建議? – jrdnsingh89 2013-04-04 17:07:20

+0

我不是OSX用戶,如果屬實,你是否可以將你的代碼更改爲MetalLookAndFeel – mKorbel 2013-04-04 17:09:19

回答

1

這是一個完整的例子。請注意,​​是默認設置。

附錄:一些額外的getTreeCellRendererComponent()示例顯示here;您可能需要調整setRowHeight()

image

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JTree; 
import javax.swing.UIManager; 

/** 
* @see 
*/ 
public class Test { 

    private void display() { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JTree tree = new JTree(); 
     tree.putClientProperty("JTree.lineStyle", "Angled"); 
     //tree.putClientProperty("JTree.lineStyle", "Horizontal"); 
     //tree.putClientProperty("JTree.lineStyle", "None"); 
     for (int i = 0; i < tree.getRowCount(); i++) { 
      tree.expandRow(i); 
     } 
     f.add(tree); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) throws Exception { 
     UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Test().display(); 
      } 
     }); 
    } 
}