JTextArea 的大小

The size of a JTextArea

我在 JFrame 中有一组 JPanel。其中一个面板包含 JTextArea。目前我是这样创建的:

JTextArea = new JTextArea(5, 40);

这给了我一个 5 行乘(大约)40 列的文本区域。

在垂直方向上,这正如我所愿,该区域填满了 parent 容器的整个高度 - 可能是因为 parent 是该行中唯一的元素。

水平 parent 宽度由下面的元素决定,它(通常)比 JTextArea 宽。所以我最终得到了一个两边都有很大边距的文本区域。更糟糕的是,当我将框架的大小调整得更小,使文本区域恰好等于 parent 容器的宽度时,它突然 'flicks' 并变成一个 1 行高的文本区域然后 parent.

的宽度

请原谅下面的粗图,它有望说明问题。

简而言之:我如何创建一个 JTextArea 始终填充可用的最大值 space? (如果可能的话,如果用户将框架调整得更小,则滚动条会出现在最小宽度之后)

在 JTextArea 的父容器中(在您的绘图中表示为面板 1),调用函数:

panel1.setLayout(new BorderLayout());

有关参考,请参阅此文档页面:

https://docs.oracle.com/javase/7/docs/api/java/awt/BorderLayout.html

由于您在 panel1 中只有一个子项,因此 panel1 的 BorderLayout 布局管理器将默认拉伸文本区域以使用父容器中的所有可用 space。

您可能想要删除指定 TextArea 大小的构造函数参数。 BorderLayout 应该为您处理尺寸:)

您可以通过调用以下命令请求 Swing 遵守文本区域的某个最小尺寸:

textArea.setMinimumSize(new Dimension(minimum_width, minimum_height));

您必须使用布局管理器,首先请参阅 oficial Oracle docu about layout managers。对于您的情况,BorderLayoutGridBagLayout 应该可以正常工作。

开始于:

panel1.setLayout(new BorderLayout());

panel1.setLayout(new GridBagLayout());

使用 GridBagLayout 您可以更精确地进行布局(使用 BorderLayout 您有五个区域 - 不多也不少)。使用 GridBagLayout 你可以做更复杂的布局。