有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JTextArea不会出现在布局为空的JPanel上

我怎样才能让我的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);
}
}

共 (1) 个答案

  1. # 1 楼答案

    text.setSize(this.getWidth(), this.getHeight());
    

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

    该面板尚未添加到visible 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以获取包含上述所有建议的简单示例