如何让 JTextArea 出现在 JTextField 上方?

问题描述

当我使用 SOUTH 将它们都添加BorderLayout 时,只出现 JTextArea。我将文本字段用作输入,然后将其显示在文本区域中作为其上方的输出以及一些其他文本。

如果我将文本区域设置为 norTH 会起作用,但它看起来不太好。

JPanel cmdPanel = new JPanel(new BorderLayout());

field = new JTextField(20);
cmdPanel.add(field,BorderLayout.soUTH);

JTextArea output=new JTextArea();
output.setEditable(false);
output.setLineWrap(true);
cmdPanel.add(output,BorderLayout.soUTH);

此图显示了 TextArea 设置为 norTH 时的外观。 我只是想让它出现在 TextField 上并向上移动 添加输出时的屏幕。

Image

解决方法

您尚未提供 minimal,reproducible example,但从您正在运行的应用的屏幕截图来看,您似乎明确设置了 JFrame 的大小。而不是这样做,您应该调用方法pack。请注意,您应该JTextFieldJTextArea 添加到 cmdPanel 以及将 cmdPanel 添加到之后调用该方法JFrame。此外,您应该在调用方法 setVisible 之后在 JFrame 上调用方法 pack()

在将 JTextArea 添加到 cmdPanel 之前,您还应该确保它具有首选大小。一种方法是调用采用行数和列数参数的 constructor

也许还可以将 JTextArea 包裹在 JScrollPane 中并使其成为 cmdPanel 的“中心”组件?

JPanel cmdPanel = new JPanel(new BorderLayout());

field = new JTextField(20);
cmdPanel.add(field,BorderLayout.SOUTH);

JTextArea output=new JTextArea(10,20);
output.setEditable(false);
output.setLineWrap(true);
JScrollPane scrollPane = new JScrollPane(output);
cmdPanel.add(scrollPane,BorderLayout.CENTER);
,

不能在同一位置(即 BorderLayout.PAGE_END)添加两个组件。要在同一位置添加更多组件,您应该创建一个 JPanel,在其上添加组件,然后将 JPanel 添加到所需位置(即 BorderLayout.PAGE_END)。