[英]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.