【问题标题】:JTextArea does not appear on JPanel with null layoutJTextArea 不会出现在具有空布局的 JPanel 上
【发布时间】:2019-04-26 01:20:55
【问题描述】:

如何让我的 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);
}
}

【问题讨论】:

    标签: java swing file jtextarea


    【解决方案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,了解包含上述所有建议的简单示例。

    【讨论】:

    • @carnickr 我修改了我的课程以适应你的代码,但文本仍然没有显示出来。
    • @我不可能你在做什么或你改变了什么。基本上你发布的整个代码都是错误的,所以你需要重新开始。我为您提供了一个完整的工作示例。你测试过那个代码吗?使用该代码作为起点,并根据您的特定要求对其进行自定义。
    • 很抱歉不够清晰。我编辑了我在原始问题上发布的代码,使其与您的代码匹配并将其放入 JFrame 中以查看它是否会显示。背景确实出现了,但文本区域不是我的意思。新代码是我测试的整个类。
    • 我能够重做并弄清楚。感谢您的帮助。
    猜你喜欢
    • 2013-02-05
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多