Почему этот код JTextArea занимает весь JFrame? - PullRequest
2 голосов
/ 13 октября 2011

Я ожидаю, что часть моего фрейма содержит 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; 
}

Ответы [ 2 ]

7 голосов
/ 13 октября 2011

JFrame по умолчанию использует BorderLayout. Когда вы просто добавляете что-то к BorderLayout компоненту, например JFrame, это добавит к самому центру BorderLayout (если вы не указали, куда добавить компонент), и это займет весь JFrame .

Вы должны использовать правильный макет , чтобы настроить их.

0 голосов
/ 13 марта 2013

Вы можете попробовать использовать Абсолютный макет. Это на паллете макетов.

Или включите его с помощью:

frame = new JFrame();
... //your code here

// to set absolute layout.
frame.getContentPane().setLayout(null);

Таким образом, вы можете свободно размещать элемент управления в любом месте.

...