2011-08-26 3 views
2

Java 1.4.2 Personal Basis Profile을 기반으로 Amazon Kindle KDK 용 사용자 정의 Java 구성 요소를 생성합니다. 구성 요소에는 필요한 경우 여러 행으로 리플 로우되는 텍스트가 포함됩니다. 정확하게 텍스트가 포함될 getMinimumSize(), getPreferredSize()getMaximumSize() 메서드를 사용하여 크기를 요청하고 싶습니다. 레이아웃 중에 컴포넌트가 얼마나 많은 너비를 가지는지에 따라 필요한 정확한 높이를 요청해야합니다.적절한 높이를 요청하기 위해 Java 구성 요소가받을 최대 너비를 알려주는 방법은 무엇입니까?

예를 들어 구성 요소가 한 줄에 모든 텍스트를 포함 할만큼 충분한 너비를 수신하면 한 줄의 높이 만 요청합니다. 그러나 텍스트가 3 줄에 들어가기에 충분한 너비 만 받으면 3 줄의 텍스트를 허용하는 높이를 요청합니다.

레이아웃을 두 번 통과해야하는데, 첫 번째 줄은 텍스트를 한 줄에 맞추기 위해 필요한 너비입니다. 그런 다음 필요한 경우 여러 줄에 텍스트를 맞출 높이 높이를 요청할 수있는 너비의 양을받습니다. 적절한 폭의 DimensiongetMinimumSize(), getPreferredSize()getMaximumSize()에 반환하기 위해이 폭이 무엇인지 알아내는 가장 좋은 방법은 무엇입니까?

편집 : 명확히하기 위해 기꺼이 JTextArea을 사용하지만 PBP에는 스윙 및 제한된 AWT 구성 요소가 없습니다. Kindle KDK에는 KTextArea 및 KLabelMultiline을 비롯한 몇 가지 기본 구성 요소가 있습니다. 문제는 모두 매우 버그가 있으며 유연한 레이아웃 상황에서 적절하게 자체 크기를 조정하지 않습니다. 고정 된 레이아웃에서는 모든 것이 고정 된 영역으로 사용됩니다. 그러나 접착제 요소 및 가변 크기를 가질 수있는 기타 텍스트 구성 요소가있는 레이아웃에 배치 할 때 맞춤 구성 요소를 사용하여 해결하려는 모든 텍스트를 표시하기 위해 확장되지 않습니다.

+0

구성 요소가 완전히 초기화 될 때까지 대기하는 스윙 이벤트가 있어야합니다. 그러면 이벤트 처리기에서 현재 너비를 사용하여 높이를 설정할 수 있습니다. 그 이벤트의 이름이 무엇인지 모르겠습니다. –

답변

1

아마도 JTextArea를 사용하여 텍스트를 표시하기 만하면됩니다. 이 솔루션은 너무 단순하다면

import java.awt.*; 
import javax.swing.*; 

public class TextAreaHeight extends JFrame 
{ 

    public TextAreaHeight() 
    { 
     JTextArea textArea = new JTextArea(); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 
     textArea.setText("one two three four five six seven eight nine ten"); 
     add(textArea, BorderLayout.NORTH); 

     JPanel center = new JPanel(); 
     center.setBackground(Color.ORANGE); 
     add(center, BorderLayout.CENTER); 
     setSize(200, 200); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
} 

    public static void main(String[] args) 
    { 
     new TextAreaHeight(); 
    } 
} 

후 더 나은 당신이 그렇게 우리는 당신이 겪고있는 문제를 볼 수 있습니다 무엇을하려고 입증하는 SSCCE을 게시 할 수 있습니다.

+0

저는 ' d는 기꺼이'JTextArea'를 사용하지만, PBP에는 스윙과 제한된 AWT 컴포넌트가 없습니다. Kindle KDK는'KTextArea'와'KLabelMultiline'을 포함하여 몇 가지 기본적인 구성 요소를 가지고 있습니다. 문제는 모두 매우 버그가 있으며 유연한 레이아웃 상황에서 적절하게 자체 크기를 조정하지 않습니다. 고정 된 레이아웃에서는 모든 것이 고정 된 영역으로 사용됩니다. 그러나 접착제 요소 및 가변 크기를 가질 수있는 기타 텍스트 구성 요소가있는 레이아웃에 배치 할 때 맞춤 구성 요소를 사용하여 해결하려는 모든 텍스트를 표시하기 위해 확장되지 않습니다. –

+0

죄송합니다. Swing 태그를보고 Swing 구성 요소에 대한 모든 액세스 권한이 있다고 가정합니다. – camickr

+0

네, 누군가 그 태그를 추가했습니다. 그것은 적용되지 않습니다. –