Как предотвратить рост JScrollPane с помощью JTextArea, не делая его фиксированного размера? - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь написать программу управления квартирой с TabbedPane, я создал класс, расширяющий JPanel с помощью GroupLayout, и добавил его в свой TabbedPane. У меня есть две области JTextAreas в этом классе, и я помещаю их в JScrollPanes.

Когда я пишу им что-нибудь длинное, их ScrollPanes растут по горизонтали, как я могу это предотвратить.

Я пытался добавить textarea.setLineWrap(true);, она решает мою проблему, но создает новую проблему; Я не могу автоматически изменять их размер в ScrollPanes. Таким образом, они становятся фиксированного размера.

    JTextArea diger = new JTextArea();
    JScrollPane digerS = new JScrollPane(diger);
    JTextArea rapor = new JTextArea();
    JScrollPane raporS = new JScrollPane(rapor);

    layout.setHorizontalGroup(layout.createSequentialGroup()
            .addGap(5)
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
                    .addComponent(kisiBilgileri)
                    .addComponent(daireBilgileri)
                    .addComponent(iletisimBilgileri)
                    .addComponent(_diger, 0, GroupLayout.DEFAULT_SIZE, Integer.MAX_VALUE)
                    .addComponent(digerS, 0, GroupLayout.DEFAULT_SIZE, Integer.MAX_VALUE) //textarea1's scrollpane
            )
            .addGap(5)
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
                    .addComponent(ara, 0, GroupLayout.DEFAULT_SIZE, Integer.MAX_VALUE)
                    .addComponent(daireSec, 0, GroupLayout.DEFAULT_SIZE, Integer.MAX_VALUE)
                    .addComponent(kaydet, 0, GroupLayout.DEFAULT_SIZE, Integer.MAX_VALUE)
                    .addComponent(sil, 0, GroupLayout.DEFAULT_SIZE, Integer.MAX_VALUE)
                    .addComponent(_rapor, 0, GroupLayout.DEFAULT_SIZE, Integer.MAX_VALUE)
                    .addComponent(raporS, 0, GroupLayout.DEFAULT_SIZE, Integer.MAX_VALUE) //textarea2's scrollpane
                    .addGroup(layout.createSequentialGroup()
                            .addComponent(aidatAy)
                            .addGap(5)
                            .addComponent(aidatEvDurumu)
                    )
                    .addComponent(aidatTuru)
                    .addGroup(layout.createSequentialGroup()
                            .addComponent(aidatMiktar)
                            .addGap(5)
                            .addComponent(aidatOde)
                    )
            )
            .addGap(5)
    );

и моя программа выглядит так: First and normal

Второй и проблема

1 Ответ

1 голос
/ 20 июня 2020
JTextArea diger = new JTextArea();

Когда вы создаете JTextArea, как указано выше, текстовая область не знает, как изменить свой размер, поэтому она может изменяться в размере по мере добавления / удаления текста (в зависимости от используемого диспетчера макета, я не знаю, как GroupLayout работает).

Вместо этого вы должны использовать что-то вроде:

JTextArea diger = new JTextArea(5, 20);

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

Обратите внимание, то же самое относится и к JTextField, за исключением того, что вы можете указывать только столбцы.

...