java - 如何判断 Java 组件将接收的最大宽度以请求适当的高度?

标签 java size css custom-component kindle-kdk

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

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

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

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

最佳答案

也许只使用 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这更好地展示了您正在尝试做什么,以便我们可以看到您遇到的问题。

关于java - 如何判断 Java 组件将接收的最大宽度以请求适当的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7198824/

相关文章:

wordpress - 复选框不显示为已选中

java - 如何正确使用Apache Common BeanUtil的BeanComparator来受益于内省(introspection)?

java - 如何创建 onitemclick 监听器以打开另一个 ListView

c++ - 警告 : comparison between signed and unsigned integer expressions. 。如何解决?

python - 如何在 wxpython 网格中以最快的方式设置最佳列宽?

css - 纵向媒体查询的解析错误 - wordpress

java - Spring in Action 第 4 章 testTrackCounter 未通过测试

java - 如何格式化这个输出?

c - 使用 sprintf 打印 size_t 需要多少个字符?

javascript - 如何删除 wordpress 主题以覆盖插件 css 和 js