2011-10-13 2 views
2

내 프레임의 일부가 JTextArea를 포함하지만 완전히 차지할 것으로 예상됩니다. 여기서 오류를 추적 할 수는 없습니다. 기본적으로이 코드의 JTextArea가 전체 JFrame을 차지하는 이유는 무엇입니까?

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

'frame.setLayout (null); frame.add (historyDisplayer);를 시도해보십시오. 실제로 레이아웃 관리자를 사용해야합니다. –

+1

@BalaR 안녕하세요 .. 왜 null 레이아웃을 제안합니까? 너는 아무런 즐거움도없이 많은 고통을 초래할 죄라는 것을 안다 ;-) 게시를 위해 – kleopatra

+0

+1 http://sscce.org/ – mKorbel

답변

7

JFrameBorderLayout를 사용합니다. BorderLayout 구성 요소 (예 : JFrame)에 무언가를 추가하면 구성 요소를 추가 할 위치를 지정하지 않은 경우 BorderLayout의 가장 가운데에 추가되며 전체는 JFrame이됩니다.

조정하려면 layout을 사용해야합니다.

0

절대 레이아웃을 사용해 볼 수 있습니다. Layouts Pallet에 있습니다.

또는 그것을 가능 :

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

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

이 방법을 사용하면 자유롭게 어디서나 컨트롤을 배치 할 수 있습니다 당신은 좋아한다.

관련 문제