繁体   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