为什么这段代码的JTextArea占用了整个JFrame?

Mut*_*han 2 java swing textarea frame layout-manager

我希望我的框架的一部分包含JTextArea但它完全占用.我无法在这里追踪错误.

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

public class EchoServer 
{
   public static void main(String args[])
   {
       CalcFrame c = new CalcFrame();
       CalcTextArea a = new CalcTextArea();
   } 
}

class CalcTextArea 
{
    JTextArea historyDisplayer  = new JTextArea("",50,20);
    CalcTextArea()
    {  
          //historyDisplayer.setVisible(true);
          historyDisplayer.insert("Hello World", 0);              
          Color bg = new Color(23,34,56);              
          historyDisplayer.setBackground(bg);               
          historyDisplayer.setBackground(bg);
    }       
}

class CalcFrame extends CalcTextArea
{
    JFrame frame = new JFrame(); 
    CalcFrame()
    {
        frame.setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
        frame.setTitle("CALCULATOR");
        frame.setVisible(true);
        frame.add(historyDisplayer);

    }
    private static int  DEFAULT_WIDTH = 299,DEFAULT_HEIGHT = 190; 
}
Run Code Online (Sandbox Code Playgroud)

tho*_*olh 7

JFrame默认使用BorderLayout.当您只是将某些内容添加到BorderLayout组件上时JFrame,它会添加到中心BorderLayout(如果您没有指定添加组件的位置),它会占用整个组件JFrame.

您应该使用正确的布局来调整它们.