java - 添加 JScrollPane 时 JTextArea 消失

标签 java swing layout-manager null-layout-manager

我是 Java Swing 的业余爱好者,无法解决以下问题。

当我将 JScrollPane 添加到 JTextArea 时,这两个组件在 GUI 中都不可见。

我知道在添加滚动条时不应该添加文本区域(我注释掉了那一行),但这没有帮助。

    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JTextArea textArea = new JTextArea();
    textArea.setBounds(213, 11, 186, 240);
// NOT CALLING       frame.getContentPane().add(textArea);
    scroll = new JScrollPane(textArea);
    scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

    frame.getContentPane().add(scroll);

它仅在我使用 BorderLayout 时对我有用,但这不是我想使用的布局。
我的目标是在框架中放置多个文本区域。

我该怎么做才能让文本区域滚动显示,比如说,使用 AbsoluteLayout (null)?

最佳答案

您的框架使用空布局。

您将滚动 Pane 添加到框架,但滚动 Pane 的大小为 (0, 0),因此没有任何内容可绘制。

不要使用空布局。

取而代之的是使用布局管理器。然后布局管理器将管理每个组件的大小和位置,因此您不必这样做。不要试图重新发明轮子,布局管理器的创建是有原因的,绝对没有理由在使用 JScrollPane/JTextArea 时尝试使用空布局。

textArea.setBounds(213, 11, 186, 240);

顺便说一句,当您将文本区域(或任何组件)添加到滚动 Pane 时,该代码将不执行任何操作。然后滚动 Pane 使用它自己的布局管理器并将覆盖这些值。

JTextArea textArea = new JTextArea();

不要使用这样的代码来创建文本区域。而是使用类似的东西:

JTextArea textArea = new JTextArea(5, 30);

现在文本区域可以确定自己的首选大小,布局管理器可以使用该信息。

关于java - 添加 JScrollPane 时 JTextArea 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35235667/

相关文章:

java等待swing.timer任务完成后再执行下一个任务

java - JFrame 始终位于顶部,主框架上不执行任何操作

java - 使用 SpinDateModel 处理 JSpinner 中的日期格式

Java GUI - 不是 Swing

java - 方法有8个参数,大于7个授权

java - 是否可以通过扩展 POJO 来构建 JPA 实体?

java - 更新java布局管理器

java - 需要一个 JCheckBox 位于 JLabel 之前,但标签位于复选框底部稍上方

java - 如何将 JTextArea 添加到 Closable TabbedPane

java - 从不使用 spring ldap 设置 tls_reqcert