如何在不固定大小的情况下防止 JScrollPane 通过其 JTextArea 增长?

How to prevent JScrollPane grow by its JTextArea without make it fixed size?

我正在尝试使用 TabbedPane 编写公寓管理程序,我创建了一个 class 扩展 JPanel 和 GroupLayout 并将其添加到我的 TabbedPane。我在这个 class 中有两个 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)
    );

我的程序如下所示:

JTextArea diger = new JTextArea();

当你像上面那样创建一个 JTextArea 时,文本区域不知道如何调整自己的大小,所以它可能会随着文本的大小而改变 added/removed(取决于所使用的布局管理器,我不知道GroupLayout 的工作原理)。

相反,你应该使用类似的东西:

JTextArea diger = new JTextArea(5, 20);

建议文本区域的行数和列数。现在文本区域可以确定自己的首选大小,布局管理器可以使用此信息。

请注意,这同样适用于 JTextField,只是您只能指定列。