我们如何在java中的JTextArea上添加JScrollPane?

AR7*_*AR7 2 java swing jscrollpane

谁能告诉我下面的程序有什么问题?我想要适应JScrollPane,JtextArea但当我添加它然后JTextArea是不可见的.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Area extends JFrame
{
    private JTextArea ta;
    private JTextField tf;
    JScrollPane jp;

    public Area()
    {
       super("Text Area");
       tf=new JTextField();
       tf.setBounds(100,350,300,30);
       add(tf);
       ta=new JTextArea();
       ta.setBounds(100,100,300,200);
       jp= new JScrollPane(ta);
       add(jp);
       setLayout(null);
       setSize(500,500);
       setVisible(true);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }

   public static void main(String...s)
   {
      new Area();
   }
}
Run Code Online (Sandbox Code Playgroud)

tra*_*god 11

我看到几个问题:

  • 不要使用null布局; 使用真实的布局.

  • 默认布局JFrameBorderLayout; 默认位置是CENTER; 只有一个组件可以一次占据一个位置; 以下示例使用NORTH&CENTER.

  • 使用适当的构造函数参数最初调整文本组件的大小.

  • 只要滚动窗格小于封闭的组件,滚动条就会自动出现; 调整框架大小以查看效果.

  • 如图所示这里,帧的大小是由用于影响较小.

  • 另请参见初始线程.

图片

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

/** @see https://stackoverflow.com/a/19215436/230513 */
public class Area extends JFrame {

    public Area() {
        super("Text Area");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTextField tf = new JTextField(12);
        add(tf, BorderLayout.NORTH);
        JTextArea ta = new JTextArea(24, 12);
        JScrollPane jp = new JScrollPane(ta);
        add(jp, BorderLayout.CENTER);
        pack();
        // arbitrary size to make vertical scrollbar appear
        setSize(240, 240);
        setLocationByPlatform(true);
        setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Area();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)