簡體   English   中英

如何調整 JTextArea 的大小以適合 JFrame 的百分比

[英]How to resize JTextArea to fit percentage of JFrame

這絕對是一個菜鳥問題。 如何調整兩個 JTextArea 面板的大小,使它們看起來像這樣:

aaaaaaaaaaaaaa
a   a        a
a   a        a
a   a        a
aaaaaaaaaaaaaa

第一個區域的寬度約為第二個的十分之一。 我還必須將它包含在一個新的滾動窗格中,但我已經處理好了。 調整大小 function 似乎不起作用。

創建文本區域時,您使用以下內容:

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):

上面的代碼將為您提供固定大小的文本區域。

或者,如果您真的想按百分比進行操作並允許文本區域動態增長/縮小,您可以使用:

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

然后使用具有適當約束的 GridBagLayout 將它們添加到 JPanel。 您需要使用: 1. “填充”約束,允許文本區域隨着可用空間的增長而增長。 2.“weightx”約束。 這將允許您以所需的百分比分配額外的空間。

閱讀 Swing 教程中有關如何使用 GridBagLayout的部分以獲取更多信息和工作示例。

您可以使用JSplitPane水平(或垂直)拆分兩個組件(文本區域)。 這種方法讓用戶可以自由地將分隔線(即兩個區域的垂直分隔線)移動到他/她喜歡的位置。

至於每個組件空間分配的偏好,您可以使用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的更多信息,您可以閱讀相應的教程或文檔本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM