Как изменить размер JTextArea, чтобы он соответствовал проценту JFrame - PullRequest
0 голосов
/ 12 апреля 2020

Это определенно нубский вопрос. Как мне изменить размеры двух панелей JTextArea, чтобы они выглядели примерно так:

aaaaaaaaaaaaaa
a   a        a
a   a        a
a   a        a
aaaaaaaaaaaaaa

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

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Когда вы создаете текстовые области, вы используете что-то вроде:

JTextArea textArea1 = new JTextArea(10, 10);
JTextArea textArea2 = new JTextArea(10, 80);

Два числа указывают количество строк и символов в каждой строке.

Затем вы добавляете их на панель прокрутки:

JPanel panel = new JPanel();
panel.add(textArea1);
panel.add(textArea2);

JScrollPane scrollPane = new JScrollPane( panel );
frame.add(scrollPane):

Приведенный выше код даст вам текстовые области фиксированного размера.

Или, если вы действительно хотите сделать это в процентах и ​​позволить текстовым областям динамически расти / shrink вы бы использовали:

JTextArea textArea1 = new JTextArea(10, 1);
JTextArea textArea2 = new JTextArea(10, 1);

И затем добавьте их в JPanel, используя GridBagLayout с соответствующими ограничениями. Вам нужно будет использовать: 1. ограничение "fill", которое позволит текстовым областям увеличиваться по мере увеличения доступного пространства. 2. Контракт "Weightx". Это позволит вам выделить дополнительное место в процентах, которые вы хотите.

Прочтите раздел из учебника Swing по Как использовать GridBagLayout для получения дополнительной информации и рабочих примеров.

1 голос
/ 15 апреля 2020

Вы можете использовать JSplitPane для разделения по горизонтали (или по вертикали) двух компонентов (текстовых областей). Этот подход позволяет пользователю свободно перемещать разделитель (ie вертикальный разделитель двух областей) в местоположение, которое он / она предпочитает.

Что касается предпочтения в распределении пространства каждого компонента, вы можно использовать метод setResizeWeight, который будет распределять новое пространство, выделенное для разделенной панели (каждый раз, когда пользователь изменяет размер окна) в соответствии с указанным значением. Например, при вызове этого метода со значением 0.5 новый размер будет равномерно распределен между левым и правым компонентами. Значение 0 даст все дополнительное пространство в нужном компоненте. Значение 1 передаст его левому компоненту. Значение 1.0 / 3.0 разделит новое пространство на три, а затем зарезервирует первую треть левому компоненту, а остальные две трети - правому компоненту. И так далее ...

Это должно быть удобно для пользователя, хотя если вы не хотите, чтобы пользователь самостоятельно перемещал разделитель, используйте ответ camickr .

Вот рабочий пример:

import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class Main {
    private static Component buildTextAreaContainer() {
        final JTextArea txt = new JTextArea();
        final JScrollPane scroll = new JScrollPane(txt);
        return scroll;
    }

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(() -> {
            final JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, buildTextAreaContainer(), buildTextAreaContainer());
            //split.setContinuousLayout(true);
            //split.setOneTouchExpandable(true);
            split.setResizeWeight(1d / 3d); //one third for left component, two thirds for right component.
            split.setPreferredSize(new Dimension(1000, 600));

            final JFrame frame = new JFrame("Splitted text areas test.");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(split);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}

Чтобы узнать больше о том, как использовать JSplitPane, вы можете прочитать соответствующий учебник или сами документы.

...