2011-08-21 4 views
2

트리가 확장되어 있고 트리 노드의 이름을 바꾸려고 시도 할 때 모든 이름이 약 4 개의 5 글자로 표시되고 다른 글자는 (...)으로 표시되지는 않지만 트리가 축소되면 모든 사항이 정상입니다. 다음은 내 사용자 지정 트리 셀 렌더링 :확장 된 JTree 렌더링

public class customTreeCellRenderer extends DefaultTreeCellRenderer { 
    public Component getTreeCellRendererComponent(JTree tree, 
     Object value, boolean selected, boolean expanded, 
     boolean leaf, int row, boolean hasFocus){ 

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


     label.setSize(label.getHeight(),value.toString().length()); 
     label.setText(value.toString()); 
     label.repaint(); 
     tree.revalidate(); 
     this.repaint(); 
     System.out.println("expanded "+expanded); 
     System.out.println("Custom "+ value.toString()); 

     return label; 
    } 
} 
+1

1. 귀하의 질문에 무엇입니까? 2. 더 빨리 도움을 받으려면 [SSCCE] (http://pscode.org/sscce.html)를 게시하십시오. –

+0

참고 사항 [답변] (http://stackoverflow.com/questions/5822810/how-does-one-make-a-component-in-the-center-of-a-borderlayout-occupy-all-center/ 5824318 # 5824318). – trashgod

+0

이 포럼에 오신 것을 환영합니다 :-) 성공적인 참여를 위해 a) 자바 명명 규칙을 배우고 그들에게 충실하십시오. b) 결코 응용 프로그램 코드에서 setSize를 호출 할 수 없습니다. c) 그리기주기에서 다시 칠하기/재확인을 절대로 트리거하지 마십시오. 실제로, getXXRendererComp에서 대상의 상태를 절대로 변경하지 마십시오. d) 렌더러/편집기 개념 – kleopatra

답변

0
label.setSize(label.getHeight(),value.toString().length()); 
  1. 이 방법은 폭과 높이를합니다, 당신은 두 매개 변수 투입합니다.
  2. String.length()는 문자열의 표시 크기가 아닌 문자 수만 반환합니다. 당신이 DefaultRenderer의 폰트 렌더링 문자열의 폭을 얻고 싶은 경우에, getFont().getStringBounds("yourString", getFontMetrics(getFont()).getFontRenderContext()).getWidth();

당신이 시도 할 수 있습니다 사용

if (label.getGraphics() != null) { 
    final Rectangle2D r = getGraphics().getFontMetrics(getFont()) 
     .getStringBounds(value.toString(), getGraphics()); 

    final Dimension d = new Dimension((int) r.getWidth() 
     + getIcon().getIconWidth() + getIconTextGap(), (int) r.getHeight()); 

    label.setMaximumSize(d); 
    label.setPreferredSize(d); 
    label.setMinimumSize(d); 
    }