Изменение размера JTextArea с окном

Привет, я новичок в Java Swing и решил создать текстовый редактор:

import java.awt.FlowLayout;  
import javax.swing.*;
public class main {
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(500, 500);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().setLayout(new FlowLayout());
        JTextArea textArea = new JTextArea();
        JScrollPane scrollableTextArea = new JScrollPane(textArea);
        scrollableTextArea.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollableTextArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        f.pack()
  
        f.getContentPane().add(scrollableTextArea);
    }
}

но JTextArea не изменяет размер окна

Я попытался получить размер окна и изменить размер JTextArea по размеру окна (я потерял код)

Пожалуйста помоги!

Вам нужно посмотреть, как работают менеджеры по расположению. Удалить f.getContentPane().setLayout(new FlowLayout()); Звоните pack() после того, как выложите компоненты

g00se 11.06.2024 14:30

Я предлагаю еще раз взглянуть на менеджеры макетов и на то, как они работают. Официальное руководство — хорошее место для начала: docs.oracle.com/javase/tutorial/uiswing/layout/index.html

sorifiend 11.06.2024 14:31

Зачем ты вообще добавил строчку f.getContentPane().setLayout(new FlowLayout());? Он конкретно просит о поведении, которого вы не хотите. Кроме того, нет смысла делать f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); дважды. И, как уже было сказано, pack() должно появиться после того, как вы добавили компоненты. И f.setVisible(true); должно прийти даже после этого; это должно быть последнее, что нужно сделать. А поскольку pack() определит правильный размер окна, оператор f.setSize(500, 500); не нужен.

Holger 11.06.2024 14:40

Почему вы используете ScrollPane, если хотите, чтобы размер текстовой области изменялся вместе с окном?

matt 11.06.2024 14:46

@matt Почему вы используете ScrollPane, если хотите, чтобы размер текстовой области изменялся вместе с окном? -если у вас есть сотня строк текста, вы все равно хотите иметь возможность видеть всю строку текста (путем прокрутки), если весь текст не помещается в пространство, доступное для окна. По этой причине JTextArea и JTextPane почти всегда добавляются в панель прокрутки.

camickr 11.06.2024 16:02

Когда вы создаете JTextArea, вам следует использовать код типа new JTextArea(10, 40), чтобы указать строки/столбцы по умолчанию для текстовой области, чтобы при «упаковке» фрейма текстовая область могла отображаться с разумным размером.

camickr 11.06.2024 16:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У Oracle есть полезное руководство Создание графического интерфейса с помощью Swing . Пропустите раздел «Обучение с использованием среды IDE NetBeans». Особое внимание обратите на раздел Размещение компонентов в контейнере.

Изучите остальную часть урока позже.

Вот графический интерфейс, который иллюстрирует JTextArea, который меняет размер, когда JFrame меняет размер. Я использовал менеджеры компоновки Swing.

Все приложения Swing должны начинаться с вызова метода SwingUtilitiesinvokeLater. Этот метод гарантирует, что компоненты Swing создаются и выполняются в потоке диспетчеризации событий .

У JFrame есть значение по умолчанию BorderLayout. Я использовал BorderLayout вместо JPanel.

Выработайте привычку размещать компоненты Swing в JPanel.

Используйте гораздо более описательные имена полей. Используйте несколько методов и классов. Это облегчает чтение и понимание кода другими людьми.

Вот полный работоспособный код.

import java.awt.BorderLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class JTextAreaExample2 implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new JTextAreaExample2());
    }

    @Override
    public void run() {
        JFrame frame = new JFrame("JTextArea Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(createTextAreaPanel(), BorderLayout.CENTER);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private JPanel createTextAreaPanel() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

        JTextArea textArea = new JTextArea(20, 60);
        JScrollPane scrollPane = new JScrollPane(textArea);
        panel.add(scrollPane, BorderLayout.CENTER);

        return panel;
    }

}

Другие вопросы по теме