JTextArea 不会出现在具有空布局的 JPanel 上

JTextArea does not appear on JPanel with null layout

如何显示我的 JTextArea? class 的所有功能都在从另一个 class 调用时工作,该构造函数使用一个文件,我可以在设置文本后使用 getText() 从 JTextArea 完美地获取文本它添加到文件的文本中,但是 JTextArea 根本没有显示在面板上,即使我正在添加它并设置大小和位置。

我知道问题出在文本区域本身而不是文件,所以我尝试更改布局,这是我在类似问题上看到的内容,但是,它没有用。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.text.*;

public class EditableArea extends JPanel
{
JTextArea text;

public EditableArea()
{
    setBackground(Color.GREEN);
    text = new JTextArea(5, 20);
    text.setText("default text");
    JScrollPane scrollPane = new JScrollPane(text);
    add(scrollPane);
}

public void paintComponent(Graphics g)
{
    super.paintComponent(g);
}
}
text.setSize(this.getWidth(), this.getHeight());

默认情况下,Swing 组件的大小为 (0, 0)。

面板尚未添加到可见 GUI,因此面板的大小为 (0, 0),因此文本的大小为 (0, 0),没有可绘制的内容。

不要尝试设置文本区域的大小。 Swing 组件应确定自己的首选大小,并且应使用布局管理器,以便组件以其首选大小显示。

所以基本代码应该是:

//setLayout(null);
text = new JTextArea(5, 20);
JScrollPane scrollPane = new JScrollPane(textArea);
add( scrollPane );
// add text from file to the text area.

以上逻辑将:

  1. 指定文本区域的默认值row/columns。
  2. 如果文本文件包含超过 5 行数据,则将文本区域添加到滚动窗格,以便您可以滚动文本区域中的文本。

另外,当你将文件读入文本区时,你应该只使用文本区的read(..)方法来读取文件。不要重新发明轮子。

请参阅:Loading a text file into a textarea 了解包含上述所有建议的简单示例。