JTextArea не отображается в JPanel с нулевым макетом - PullRequest
0 голосов
/ 26 апреля 2019

Как я могу сделать так, чтобы мой JTextArea появлялся? Все функциональные возможности класса работают, когда он вызывается из другого класса с помощью конструктора, который принимает файл, и я могу отлично получить текст из JTextArea с помощью getText () после установки текста для него в текст файла, однако 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 голос
/ 26 апреля 2019
text.setSize(this.getWidth(), this.getHeight());

По умолчанию компоненты Swing имеют размер (0, 0).

Панель не была добавлена ​​в видимый графический интерфейс пользователя, поэтому ее размер равен (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(..) текстовой области, чтобы прочитать файл. Не изобретай велосипед.

См. Загрузка текстового файла в текстовую область для простого примера, включающего все вышеупомянутые предложения.

...