如何让我的 JTextArea 显示出来?当该类从另一个具有接受文件的构造函数的类调用时,该类的所有功能都有效,并且在将其文本设置为文件的文本后,我可以使用 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.
上述逻辑将:
- 指定文本区域的默认行/列。
- 如果文本文件包含超过 5 行数据,请将文本区域添加到滚动 Pane ,以便您可以滚动文本区域中的文本。
此外,当您将文件读入文本区域时,您应该只使用文本区域的 read(..)
方法来读取文件。不要重新发明轮子。
参见:Loading a text file into a textarea一个包含上述所有建议的简单示例。
关于java - JTextArea 不会出现在具有 null 布局的 JPanel 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55859581/