2013-11-14 1 views
0

Java GUI를 만들고 있습니다. (해당면에 대한 주석 달기를 자제하십시오) List()을 사용하여 문자열을 표시합니다. 어떻게 목록을 특정 너비로 ​​만들고 바깥 쪽으로 텍스트를 감쌀까요? 그 제약? 지금 내 코드는 매우 간단하다 :줄 바꿈 JFrame 목록

List list = new List(); 
list.add(myString); 
contentPane.add(list, BorderLayout.WEST); 

myString 문자열의 ArrayList 될 것입니다.

이 GUI를 작성하기 위해 Google 프로젝트 Eclipse 기능을 사용하고 있으며 대부분의 Java GUI 빌더와 마찬가지로 작업하기가 어렵습니다. 지금 GUI를 만들고 싶습니다. 본질적으로 이진 트리의 건물을 표시하려고합니다. GUI 빌더 또는 메소드가 더 쉽게 작업 할 수 있습니까? 저는 두 가지 질문을 제시하고 있습니다 만,해야한다면이 방법을 계속 사용할 것입니다.

+1

'List' ->'java.awt.List' 란 무엇입니까? – nachokk

+1

그 측면에 대한 코멘트를 삼가 해 주시기 바랍니다 ---> :-) SSCCE를 짧게, 실행 가능한, 컴파일 가능하게 게시하십시오. 그렇지 않으면 멋진 농담의 대상이 될 수 있습니다 – mKorbel

+0

문자열 너비 제약은 어떻게 정의합니까? 캐릭터? 신장? 센티미터? –

답변

2

가장 직접적인 방법은 문자열을 모델 클래스에 캡슐화하는 것입니다.

다음은 모델 클래스를 만드는 한 가지 방법입니다.

public class BreakableString { 

    private String string; 

    public BreakableString(String string) { 
     this.string = string; 
    } 

    public String getString() { 
     return string; 
    } 

    @Override 
    public String toString() { 
     StringBuilder builder = new StringBuilder(); 
     int maxWidth = 80; 
     String s = string; 

     while (s.length() > maxWidth) { 
      String t = getStringPart(s, maxWidth); 
      builder.append(t); 
      builder.append(System.getProperty("line.separator")); 
      s = s.substring(t.length()); 
     } 

     builder.append(s); 

     return builder.toString(); 
    } 

    private String getStringPart(String s, int maxWidth) { 
     String t = s.substring(0, maxWidth); 
     int ePos = t.lastIndexOf(" "); 
     if (ePos > 0) { 
      return t.substring(0, ePos); 
     } else { 
      return t; 
     } 
    } 

} 

다음으로 BreakableString의 DefaultListModel을 만듭니다. DefaultListModel을 사용하여 JList를 구성합니다.

이렇게해도 작동하지 않으면 JPanel에 여러 JTextAreas를 만들 수 있습니다. JPanel을 JScrollPane으로 묶습니다.