问题描述
当我使用 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 上并向上移动 添加输出时的屏幕。
解决方法
您尚未提供 minimal,reproducible example,但从您正在运行的应用的屏幕截图来看,您似乎明确设置了 JFrame
的大小。而不是这样做,您应该调用方法pack。请注意,您应该在将 JTextField
和 JTextArea
添加到 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)。