JTextArea的大小

时间:2016-04-22 13:02:42

标签: java swing layout-manager jtextarea

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

JTextArea = new JTextArea(5, 40);

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

垂直地按照我的喜好工作,该区域填充父容器的整个高度 - 可能是因为父元素是位于该行中的唯一元素。

水平地,父宽度由下面的元素决定,它(通常)宽于JTextArea。所以我最终得到一个两边都有大边距的文本区域。更糟糕的是,当我将框架调整到较小的位置,文本区域正好是父容器的宽度时,它会突然“轻弹”'并更改为1行高的文本区域,然后是父级的宽度。

原谅下面的粗略图纸,希望能说明问题。

enter image description here

简而言之:如何创建一个总是填充可用空间的JTextArea? (如果可能的话,使用最小宽度,如果用户将框架调整得更小,则会出现滚动条)

2 个答案:

答案 0 :(得分:1)

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

panel1.setLayout(new BorderLayout());

供参考,请参阅此文档页面:

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

由于panel1中只有一个子节点,因此panel1的BorderLayout布局管理器默认会拉伸文本区域以使用父容器中的所有可用空间。

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

您可以通过调用以下方式请求Swing尊重文本区域的特定最小大小:

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

答案 1 :(得分:1)

你必须使用布局管理器,开始见oficial Oracle docu about layout managers。对于您的情况,BorderLayoutGridBagLayout应该可以正常工作。

开始于:

panel1.setLayout(new BorderLayout());

panel1.setLayout(new GridBagLayout());

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