2012-02-01 1502 views
3

正如您從下面的圖像中看到的那樣,展開和摺疊圖標是灰色的,就像行選擇突出顯示一樣。這會導致您看不到展開或摺疊圖標(注意:不是文件夾圖標),當該行突出顯示時,我想爲選定的行具有白色展開或摺疊圖標。如何做到這一點?展開和摺疊圖標

enter image description here enter image description here

別的東西,也將是酷,有展開和摺疊圖標完全隱藏,直到JTree的獲得焦點。像Windows 7的樹。

+0

+1的一個很好的問題,但它實際上把您的評論維森特普拉塔與另一仔細看屏幕截圖,我意識到究竟你是什麼意思!我編輯了一些文字來強調***的重點。 ;) – 2012-02-01 08:48:01

+0

GUI使用什麼PLAF? – 2012-02-01 08:49:14

+0

它使用Windows LAF – ex0b1t 2012-02-01 09:55:47

回答

3

谷歌表示 - 根據這個帖子:http://www.exampledepot.com/egs/javax.swing.tree/DefIcons.html - :

// Retrieve the three icons 
Icon leafIcon = new ImageIcon("leaf.gif"); 
Icon openIcon = new ImageIcon("open.gif"); 
Icon closedIcon = new ImageIcon("closed.gif"); 

// Create tree 
JTree tree = new JTree(); 

// Update only one tree instance 
DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer(); 
renderer.setLeafIcon(leafIcon); 
renderer.setClosedIcon(closedIcon); 
renderer.setOpenIcon(openIcon); 

// Remove the icons 
renderer.setLeafIcon(null); 
renderer.setClosedIcon(null); 
renderer.setOpenIcon(null); 

// Change defaults so that all new tree components will have new icons 
UIManager.put("Tree.leafIcon", leafIcon); 
UIManager.put("Tree.openIcon", openIcon); 
UIManager.put("Tree.closedIcon", closedIcon); 

// Create tree with new icons 
tree = new JTree(); 

// Update row height based on new icons; 

當然,我不知道你是否能修改在這去的圖像的顏色。但你總是可以創建新的圖標,對吧?

+0

嘿,thx回覆,但這三個圖標(開放封閉和葉,圖標)表示爲藍色我的圖片中的文件夾,我想更改展開的摺疊圖標,灰色箭頭。我成功地改變了他們,他們總是+和 - 標誌。 – ex0b1t 2012-02-01 08:42:20

+0

可以使用下面的代碼更改它們,但是這會更改所有展開和摺疊圖標,現在我只想更改所選行的圖標。 UIManager.put(「Tree.expandedIcon」,new ImageIcon(FileBrowser.class.getResource(「Resources/Expand.png」))); UIManager.put(「Tree.collapsedIcon」,new ImageIcon(FileBrowser.class.getResource(「Resources/Collapse.png」))); – ex0b1t 2012-02-01 08:42:39

+0

第一個鏈接已經死亡。 – 2017-08-04 12:48:28

0

你可以試試這個。然而,你應該注意到爲了使這個工作,我不得不在樹上覆蓋setUI,只允許我的TreeUI。

private class IconTreeUI extends BasicTreeUI { 

    private Icon collapseIcon = null; 
    private Icon expandIcon = null; 

    @Override 
    public Icon getCollapsedIcon() { 
     if (collapseIcon == null) { 
      collapseIcon = new ImageIcon(yourCollapseImageHere); 
     } 
     return collapseIcon; 
    } 

    @Override 
    public Icon getExpandedIcon() { 
     if (expandIcon == null) { 
      expandIcon = new ImageIcon(yourExpandImageHere); 
     } 
     return expandIcon; 
    }}