我在JPanel
内有一组JFrame
。其中一个面板包含JTextArea
。目前我这样创建:
JTextArea = new JTextArea(5, 40);
这给了我一个5行(大约)40列的文本区域。
垂直地按照我的喜好工作,该区域填充父容器的整个高度 - 可能是因为父元素是位于该行中的唯一元素。
水平地,父宽度由下面的元素决定,它(通常)宽于JTextArea
。所以我最终得到一个两边都有大边距的文本区域。更糟糕的是,当我将框架调整到较小的位置,文本区域正好是父容器的宽度时,它会突然“轻弹”'并更改为1行高的文本区域,然后是父级的宽度。
原谅下面的粗略图纸,希望能说明问题。
简而言之:如何创建一个总是填充可用空间的JTextArea
? (如果可能的话,使用最小宽度,如果用户将框架调整得更小,则会出现滚动条)
答案 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。对于您的情况,BorderLayout
或GridBagLayout
应该可以正常工作。
开始于:
panel1.setLayout(new BorderLayout());
或
panel1.setLayout(new GridBagLayout());
使用GridBagLayout
,你可以更精确地进行布局(BorderLayout
你有五个区域 - 不多也不少)。使用GridBagLayout
,您可以执行更复杂的布局。