2

Java 1.4.2 Personal Basis Profile に基づいて、Amazon Kindle KDK 用のカスタム Java コンポーネントを作成しています。コンポーネントには、必要に応じて複数行にリフローするテキストが含まれます。getMinimumSize()getPreferredSize()およびgetMaximumSize()テキストを正確に含むメソッドを使用してサイズを要求したい。レイアウト中にコンポーネントが受け取る幅に基づいて、必要な正確な高さをリクエストする必要があります。

たとえば、コンポーネントがすべてのテキストを 1 行に収めるのに十分な幅を受け取る場合、コンポーネントは 1 行分の高さのみを要求します。しかし、テキストが 3 行に収まる十分な幅しか受け取っていない場合は、3 行のテキストを許容する高さを要求します。

レイアウトは 2 つのパスで行う必要があるようです。最初のパスでは、テキストを 1 行に収めるのに必要なだけの幅を要求します。次に、許容される幅の量を受け取ったら、必要に応じて複数行のテキストに収まるように高さの量を要求します。、およびDimensionで適切な値を返すために、この幅がどのようになるかを調べる最良の方法は何ですか?getMinimumSize()getPreferredSize()getMaximumSize()

編集: 明確にするために、私は喜んで a を使用しますJTextAreaが、PBP にはスイングと限定された AWT コンポーネントがありません。Kindle KDK 自体には、KTextArea や KLabelMultiline など、いくつかの基本的なコンポーネントがあります。問題は、どちらも非常にバグが多く、柔軟なレイアウトの状況で適切にサイズ変更されないことです。これらは固定レイアウトで問題なく機能し、すべてに使用する固定領域が与えられます。しかし、グルー要素や可変サイズの他のテキスト コンポーネントを含むレイアウトにそれらを配置すると、適切に展開されず、すべてのテキストが表示されません。これは、カスタム コンポーネントで解決しようとしている問題です。

4

1 に答える 1

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を投稿して、あなたが抱えている問題を確認してください。

于 2011-08-26T00:57:47.940 に答える