2

我正在基于 Java 1.4.2 Personal Basis Profile 为 Amazon Kindle KDK 创建一个自定义 Java 组件。如果需要,该组件将包含将重排为多行的文本。我想使用getMinimumSize(),getPreferredSize()以及getMaximumSize()将包含文本的方法来请求大小。我需要根据组件在布局期间接收的宽度来请求所需的确切高度。

例如,如果组件将接收到足够的宽度以包含一行上的所有文本,那么它将只请求一行的高度。但是如果它只接收到足够的宽度以使文本适合三行,那么它将请求一个允许三行文本的高度。

看来我需要分两次完成布局,第一次请求与一行中的文本一样多的宽度。然后,一旦它收到允许的宽度量,则在必要时请求高度量以适合多行文本。Dimension为了返回正确的 in和getMinimumSize(),找出这个宽度的最佳方法是什么?getPreferredSize()getMaximumSize()

编辑:为了澄清,我很乐意使用 a JTextArea,但 PBP 没有任何摆动和有限的 AWT 组件。Kindle KDK 本身有一些基本组件,包括 KTextArea 和 KLabelMultiline。问题是两者都非常有问题,并且在灵活的布局情况下不能正确调整自己的大小。它们在固定布局下工作得很好,所有东西都被赋予了一个固定的区域来使用。但是,当将它们放置在具有胶水元素和其他可以具有可变大小的文本组件的布局中时,它们无法正确扩展以显示所有文本,这是我试图通过自定义组件解决的问题。

4

1 回答 1

1

Maybe just use a JTextArea to display the text.

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();
    }
}

If this solution is too simple, then post a SSCCE that better demonstrates what you are trying to do so we can see the problems you are having.

于 2011-08-26T00:57:47.940 回答