gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:51:53 24 4
gpt4 key购买 nike

我正在基于 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com