java - JTextArea 不会出现在具有 null 布局的 JPanel 上

标签 java swing file jtextarea

如何让我的 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.

上述逻辑将:

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

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

参见:Loading a text file into a textarea一个包含上述所有建议的简单示例。

关于java - JTextArea 不会出现在具有 null 布局的 JPanel 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55859581/

相关文章:

java - 有没有办法重新启动应用程序,而不是让它在崩溃后重新启动最后一个 Activity ?

Java对象混淆

java - 在 Java Swing 的 JEditorPane 中添加 HTML

java - Angularjs 将文件多部分 FormData 中的空值传递给 Spring MVC

java - Java 中类引用的行为

Java Swing GUI 似乎没有

java - 运行 SwingSet2 演示

javascript - 如何使用 JavaScript 检查文件是否存在?

c - C 中的文件、访问指针、读取和写入文件

java - 使用 JavaCPP 在 Java Android 应用程序中运行 C++ 代码