添加JScrollPane

时间:2016-02-06 00:15:22

标签: 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时它才对我有用,但这不是我想要使用的布局。
我的目标是在框架中放置几个​​文本区域。

如何通过滚动显示文字区域,例如AbsoluteLayoutnull)?

1 个答案:

答案 0 :(得分:4)

您的框架使用空布局。

您可以将滚动窗格添加到框架中,但滚动窗格的大小为(0,0),因此无需绘制任何内容。

不要使用空布局。

Insteasd使用布局管理器。然后,布局管理器将管理每个组件的大小和位置,以便您不必这样做。不要试图重新发明轮子,布局管理器是出于某种原因而创建的,并且在使用JScrollPane / JTextArea时绝对没有理由尝试使用null布局。

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

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

JTextArea textArea = new JTextArea();

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

JTextArea textArea = new JTextArea(5, 30);

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