2013-07-07 4 views
0

xml에서 사용자 데이터를로드하여 트리 모델을 만들기 위해 app을 만들고 싶습니다. 트리에서 데이터를 선택하고 아이콘을 설정하는 옵션이 있습니다. .사용자 당 트리 노드에 대한 아이콘을 동적으로 설정합니다.

내가 성공적으로 XML 파일에서 데이터를로드 할 수 있지만, 문제는 내가 나무 여기

의 모든 노드에 대해 서로 다른 아이콘을 설정할 수 있습니다 내가

public class DefaultTreeRenderer extends DefaultTreeCellRenderer { 

private static final long serialVersionUID = 1L; 
private Icon userIcon; 
private int getSelecteRow; 

public DefaultTreeRenderer(String IconPath,int selected) throws IOException { 
    Image img = ImageIO.read(new File(IconPath)) ; 
    Image newimg = img.getScaledInstance(28, 28, java.awt.Image.SCALE_SMOOTH) ; 
    Icon x = new ImageIcon(newimg); 
    userIcon= x; 
    getSelecteRow = selected; 
} 

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

    JLabel label = (JLabel) super.getTreeCellRendererComponent(
        tree, value, sel, 
        expanded, leaf, row, 
        hasFocus); 


    if (?!!!) { 
    // This's the missing part, what should i state to set per row icon ? 

     label.setIcon(tutorialIcon); 
     label.setText(label.getText()+" √"); 

    } else{ 

    } 

    return label; 
    } 
} 

한 테스트 코드 방법은 다음과 같습니다

try { 

     jTree1.setCellRenderer(new DefaultTreeRenderer(iconPathTextBox.getText(),jTree1.getMinSelectionRow())); 
    } catch (IOException ex) { 
     Logger.getLogger(frame.class.getName()).log(Level.SEVERE , null , ex); 
    } 
+1

[JTree : 개별 그룹에 대해 사용자 정의 열림/닫힘 아이콘 설정] (http://stackoverflow.com/questions/14096725/jtree-set-custom-open-closed-icons-for-individual)의 접근 방식을 시도해보십시오. -여러 떼). – trashgod

+0

도와 줘서 고맙다는 trashgod. jtree 에있는 모든 데이터 조각에 대해 Map을 작성하여이 문제를 해결할 수있었습니다. userObject가 map 키와 같은지 확인한 다음 키 값 (아이콘)을 가져 와서 setIcon을 확인합니다. – Nemotatu

+0

[자신의 질문에 답할 수 있습니다] (http://meta.stackexchange.com/q/17463/163188). – trashgod

답변

0
public class DefaultTreeRenderer extends DefaultTreeCellRenderer { 
private static final long serialVersionUID = 1L; 
Map<String,Icon> amap = new HashMap<>(); 
ArrayList<String > drawList = new ArrayList<>(); 

public DefaultTreeRenderer(ArrayList<String > list,Map<String,Icon> amap1) throws IOException { 

    setData(list,amap1); 
} 


private void setData(ArrayList<String > lists,Map<String,Icon> amap2){ 
    amap = amap2; 
    drawList = lists; 
} 

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



      super.getTreeCellRendererComponent(
        tree, value, sel, 
        expanded, leaf, row, 
        hasFocus); 


    Object nodeInfo = ((DefaultMutableTreeNode) value).getUserObject(); 
    Icon bn = this.leafIcon; 

    if (getDrawable(nodeInfo)) { 
     setIcon(amap.get(nodeInfo.toString()));  
    } 

    if(this.getIcon()!=null && leaf) { 
     setText(nodeInfo.toString()+"  √"); 
    } 
    if(this.getIcon()==null && leaf){ 
     setIcon(bn); 
    } 



    return this; 
} 

protected boolean getDrawable(Object value) { 

    String title = value.toString(); 

    for(String c : drawList){ 
    if (title.equals(c)) { 
     return true; 
    } 
    } 

    return false; 
    } 
} 

테스트 코드 :

ArrayList<String> xmllist= new ArrayList<>(); 
Map<String,Icon> amap = new HashMap<>(); 

if(g.getName().endsWith("png") ||g.getName().endsWith("jpg")) { 

try { 
     DefaultMutableTreeNode node = (DefaultMutableTreeNode) 
        jTree1.getLastSelectedPathComponent(); 

    Object nodeInfo = node.getUserObject(); 
    String hn = imagePathTextBox.getText(); 

    Image img = ImageIO.read(new File(hn)) ; 
    Image newimg = img.getScaledInstance(28, 28, java.awt.Image.SCALE_SMOOTH) ; 
    Icon x = new ImageIcon(newimg); 
    amap.put(nodeInfo.toString() , x); 

    jTree1.setCellRenderer(new DefaultTreeRenderer(xmllist,amap)); 
    } catch (IOException ex) { 
     Logger.getLogger(frame.class.getName()).log(Level.SEVERE , null , ex); 
    } 
    }