滚动 GUI 不按我想要的方式工作

Scroll for GUI not working the way I want it to

我试图让这个 GUI 上的文本区域有一个滚动条,但是当我尝试添加它时,文本区域覆盖了滚动条,反之亦然。没有错误。代码:

        // Text Area at the Center
        JTextArea ta = new JTextArea ( 16, 58 );
        ta.setEditable ( false ); // set textArea non-editable
        JScrollPane scroll = new JScrollPane ( ta );
        scroll.setVerticalScrollBarPolicy ( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );
        
        send.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent send) {
                String data = tf.getText();
                ta.append("You: " + data + "\n");
                tf.setText("");
                System.out.println(data);
            }
        });
        
        //Adding Components to the frame.
        frame.getContentPane().add(BorderLayout.SOUTH, panel);
        frame.getContentPane().add(BorderLayout.CENTER, ta);
        frame.add(ta);
        ta.add(scroll);
        frame.setVisible(true);

这些行是问题所在:

frame.getContentPane().add(BorderLayout.CENTER, ta);
frame.add(ta);
ta.add(scroll);

不要将 JTextArea 添加到您的框架中,因为 JTextArea 已正确配置为位于 JScrollPane 的视口内(因为您已将其提供给滚动窗格之前的构造函数)。此外,您不应该将 JScrollPane 添加到 JTextArea,因为您希望相反。 正确的方法是删除提到的行并简单地将 scroll 添加到您的 JFrame,如下所示:

frame.add(scroll, BorderLayout.CENTER);

旁注:

  • 如评论中所述,考虑在将框架设置为可见之前调用 pack(),以正确调整框架及其组件的大小。