JTextArea不会以空布局显示在JPanel上

时间:2019-04-26 01:20:56

标签: java swing file jtextarea

如何显示我的JTextArea?该类的所有功能都可以在另一个带有构造函数并接收文件的类的调用中使用,并且在将其文本设置为文件文本之后,可以使用getText()从JTextArea完美地获取文本,但是,即使我添加了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);
}
}

1 个答案:

答案 0 :(得分:1)

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. 指定文本区域的默认行/列。
  2. 在文本文件包含多于5行数据的情况下,将文本区域添加到滚动窗格中,以便您可以在文本区域中滚动文本。

此外,当您将文件读取到文本区域时,应仅使用文本区域的read(..)方法来读取文件。不要重新发明轮子。

有关合并以上所有建议的简单示例,请参见:Loading a text file into a textarea