2010-08-10 1 views
4

기본적으로 Swing은 "..."을 사용하여 JLabel 및 유사한 텍스트 기반 구성 요소에서 텍스트가 잘 렸음을 나타냅니다. 이 동작을 변경하여 다른 문자 문자열 (예 : ">")을 사용할 수 있습니까?텍스트 구성 요소를 배치 할 때 Swing에서 사용하는 클립 문자열 타원을 수정하는 방법

Swing 코드를 살펴보면 clipString (...)이라는 SwingUtilities2 메서드에서 "..."문자열을 하드 코딩하는 것으로 나타났습니다.

답변

1

내가 사용하는 솔루션은 다음과 같이 진행됩니다

1) 사용자 정의

2 LabelUI

)를 LabelUI는 사용자가 제공 한 타원 스윙 타원을 대체 할 수있는 layoutCL() 메소드를 오버라이드 (override)를 등록합니다.

public class LabelUI extends MetalLabelUI { 
    private static final int SWING_ELLIPSES_LEN = "...".length(); 
    private static final ComponentUI LABEL_UI_INSTANCE = new LabelUI(); 
    private String displayedText; 
    public static ComponentUI createUI(JComponent c) { 
     return LABEL_UI_INSTANCE; 
    } 
    public String getText() { 
     return displayedText; 
    } 
    protected String layoutCL(JLabel label, FontMetrics fontMetrics, String text, Icon icon, Rectangle viewR, Rectangle iconR, Rectangle textR) { 
     displayedText = super.layoutCL(label, fontMetrics, text, icon, viewR, iconR, textR); 
     String truncationString = (String)label.getClientProperty("LabelUI.truncationString"); 
     if (truncationString != null && !displayedText.equals(text)) { 
      displayedText = displayedText.subSequence(0, displayedText.length() - SWING_ELLIPSES_LEN) + truncationString; 
     } 
     return displayedText; 
    } 
} 

3) 구성 요소에 클라이언트 속성을 설정하여 새 줄임표를 제공하십시오.

JLabel component = ... ; 
component.putClientProperty("LabelUI.truncationString", ">"); 
+0

참고 사항 [예제] (http://stackoverflow.com/a/3597688/230513). – trashgod

1

스윙에서 설정할 수 있는지 확실하지 않습니다. 원하는대로 문자열을 자르는 독자적인 JLabel 구현을 고려하십시오.

여기서 SwingUtilities의 절단 기능을 사용할 수 있습니다. 코드를 복사하여 복사 할 수 있습니다. 일반적으로 좋은 시작입니다.

JLabel의 paintComponent 메소드를 확장하고 FontMetrics를 측정하고 레이블에 잘림이 필요한지 판단해야한다고 생각합니다. 텍스트가 절단 된 값으로 설정된 경우. 필드에 잘리지 않는 값을 유지하는 것을 잊지 마십시오.

관련 문제