【问题标题】:JTextArea no scroll barJTextArea 没有滚动条
【发布时间】:2013-03-05 11:14:22
【问题描述】:
private JPanel contentPane;
public Driver() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 867, 502);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);
    final JTextArea textArea = new JTextArea();
    textArea.setEditable(false);
    textArea.setBounds(10, 11, 831, 393);
    JScrollPane scroll = new JScrollPane(textArea);
    scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    textArea.setText("dfgf");
    contentPane.add(scroll);
}

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Driver frame = new Driver();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

为什么这不显示带有滚动条的textArea

我的问题是我什至看不到 textArea。但如果我改为 contentPane.add(scroll);,我可以看到 textArea 但没有滚动。

【问题讨论】:

  • 如需更好的帮助,请考虑发布SSCCE
  • 我发布了我的代码的主要部分

标签: java swing jscrollpane jtextarea preferredsize


【解决方案1】:

“为什么这不显示带有滚动条的 textArea?”

因为滚动窗格的视口有自己的布局管理器,并且正在更改文本区域中的位置以适应其需要

视口将使用文本区域的首选大小属性来确定如何布局。您可以通过向文本区域添加文本和/或根据需要设置行/列属性来影响此值。

更新示例

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestScrollPane03 {

    public static void main(String[] args) {
        new TestScrollPane03();
    }

    public TestScrollPane03() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }
            
                JTextArea textArea = new JTextArea(100, 50);
                JScrollPane scrollPane = new JScrollPane(textArea);
            
                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(scrollPane);
                frame.setSize(200, 200);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }    
}

根据问题的变化更新

正如 camickr 已经指出的那样,您遇到的问题与您布局组件的方式有关。

contentPane.setLayout(null); 只是您的众多问题之一。停止使用 null 布局并开始使用适当的布局管理器。

【讨论】:

  • 我看不到 textarea,我写的时候看不到任何文字
  • 这听起来更像是滚动窗格布局的问题。我假设自从您开始使用 setBounds 以来,您正在尝试做自己的布局,而不是让布局管理器 API 为您做
  • 对我来说非常好
  • 我发布了我的主要代码部分,我仍然不知道如何更改它
  • 这个contentPane.setLayout(null); 是你的问题。停止使用 null 布局并开始使用布局管理器。
【解决方案2】:

当添加到滚动窗格的组件的首选大小大于滚动窗格的大小时,将自动出现滚动条。您需要使用布局管理器来自动执行此操作

final JTextArea textArea = new JTextArea();
textArea.setBounds(10, 11, 831, 393);
JScrollPane scroll = new JScrollPane(textArea);

您不应该使用 setBounds()。相反,您可以执行以下操作:

final JTextArea textArea = new JTextArea(5, 30);
JScrollPane scroll = new JScrollPane(textArea);

现在,当您加载超过 5 行文本时,将出现滚动条。当然,所有这些都假设您使用的是适当的布局管理器。

【讨论】:

  • 我什至看不到文字本身。文本区域不可见。我没有看到任何文字
  • 我已经提出问题是您没有使用布局管理器。我猜滚动窗格的大小为 0,所以它没有被绘制。修复您的代码以使用布局管理器,然后如果您仍有问题,请发布您的 SSCCE
【解决方案3】:

为什么不显示带有滚动条的 textArea

滚动条实际上​​会出现,但没有“拇指把手”,直到您将足够的文本附加到您的JTextArea 以将其大小扩展到JScrollPane 视口大小之外。

您正在为您的contentPane JPanel 使用null 布局。这从来都不是一个好主意。在这里,您的JScrollPane 的默认大小为0 x 0,因此永远不会出现。有很多 layout managers 可用于各种尺寸和定位要求。

【讨论】:

  • 问题是我没有看到 textarea 本身,就像它被其他东西覆盖了一样
  • 是的,我也会插话,如果您不使用布局管理器,请使用一个。否则你会遇到这些类型的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2015-03-09
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
相关资源
最近更新 更多